Maand + Jaartal selecteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lissy Pixel

Lissy Pixel

03/09/2006 10:21:00
Quote Anchor link
Ik heb een database met berichten en wil nu graag ook op maand en jaartal kunnen selecteren.
Dit heb ik al geprobeerd maar is niet juist:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// dit voor ook op jaar te selecteren
$strSQL = "SELECT * FROM tabel WHERE Date LIKE '%-08-2006%'";
?>


Dit werkt wel maar dan selecteer je alleen op de maand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// geeft alles van september
$strSQL ="SELECT * FROM tabel WHERE Date LIKE '%-09-%' ORDER BY Date ASC";
?>


Wat moet ik veranderen?
 
PHP hulp

PHP hulp

18/11/2024 01:45:33
 
Jan Koehoorn

Jan Koehoorn

03/09/2006 11:11:00
Quote Anchor link
@ Lissy: netter zou zijn:

SELECT veld1, veld2
FROM
tabel
WHERE YEAR(datum) = 2006
AND MONTH (datum) = 8

maar het kan ook op jouw manier:

SELECT * FROM tabel WHERE datum LIKE '2006-08-%'

In jouw voorbeeld gebruik je Date, maar die zou ik niet doen, want dat is een gereserveerd woord in MySQL.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Willem vp

Willem vp

03/09/2006 11:12:00
Quote Anchor link
Wat voor type is je Date-veld? Als het een DATE of DATETIME is, is het simpel:

SELECT *
FROM tabel
WHERE MONTH(Date) = 9
AND YEAR(Date) = 2006;

Als het "gewoon" een string is, wat is het formaat? Wordt ook het tijdstip opgeslagen? Je zou nog kunnen overwegen er een DATE of DATETIME van te maken.
 
Willem vp

Willem vp

03/09/2006 11:14:00
Quote Anchor link
Grr... het lukt me echt nooit om Jan voor te zijn, geloof ik ;-)
 
Jan Koehoorn

Jan Koehoorn

03/09/2006 11:17:00
Quote Anchor link
Hahaha, maar we liggen wel erg op één lijn, Willem ;-)
 
Lissy Pixel

Lissy Pixel

03/09/2006 11:17:00
Quote Anchor link
Grinnnnnnnn..... jullie zijn beide lieverds die altijd klaar staan met een helpend antwoord.

Voor dit deze casus kan ik verklappen dat dit een reeds bestaande tabel is van een vriendin en kan ik (denk ik) niet maar zo veranderen of wel?
 
Lissy Pixel

Lissy Pixel

03/09/2006 11:33:00
Quote Anchor link
Helaas voor deze oplossing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$Date
           =""
$Date        = date("d-m-Y  (G:i)");

$strSQL ="SELECT * FROM tabel WHERE datum LIKE '2006-09-%'";
?>

ik heb ook dit geprobeerd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$strSQL
="SELECT * FROM tabel WHERE datum LIKE '%-09-2006'";
?>

krijg ik dit:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/sandokanshome/html/dagboek.php on line 293
regel 293 is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// Nu loop door de database heen
for($a=0; $a < mysql_num_rows($Result);$a++)
    {

            $Row = mysql_fetch_array($Result);
            $Row['Bericht'] = eregi_replace("\n", "<br>", $Row['Bericht']);
?>

de rest van de output......

edit : aanvulling
Gewijzigd op 01/01/1970 01:00:00 door Lissy Pixel
 
Klaasjan Boven

Klaasjan Boven

03/09/2006 11:44:00
Quote Anchor link
Quote:
Voor dit deze casus kan ik verklappen dat dit een reeds bestaande tabel is van een vriendin en kan ik (denk ik) niet maar zo veranderen of wel?

Nope is niet zo handig.

Al het veld een varchar is en alle data staan er in als:

dag-maand-jaar en ja maakt van het veld date(time) dan klopt er van de data nix meer.

je zou wel iets kunnnen doen als:
Aan de bestaande tabel met bijv PHPmyadmin een kolom toevoegen DATUM_GOED oid.

Ni kun je een php scriptje schrijven.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sql
="SELECT date FROM tabel";
$res=mysql_query($sql)or die(mysql_error());
while($datum=mysql_fetch_array($res)){
$jaar=substr($datum['date'],7,4);
$maand=substr($datum['date'],4,2);
$dag=substr($datum['date'],0,2);
$datumgoed=$jaar."-".$maand."-".$dag;
mysql_query("UPDATE tabel SET DATUM_GOED= '".$datumgoed."' WHERE id = '".$datum['id']."'";)
}

?>


zoiets. Waarschijnlijk kan het ook wel met alleen sql met een do loopje maar dat kan ik niet.
Klaasjan

EDIT: Je query is mislukt.
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Willem vp

Willem vp

03/09/2006 11:47:00
Quote Anchor link
Die mysql_num_rows()-melding geeft aan dat er een fout zit in je SQL-query. Ik zie dat je het Date-veld nu datum hebt genoemd; heb je dat ook in de database veranderd?

Edit: hou er rekening mee dat de datum wordt ingevoerd als date("d-m-Y (G:i)") en je dus het formaat dd-mm-yyyy hebt. Je moet dan dus selecteren op %-09-2006 ipv op 2006-09-%
Gewijzigd op 01/01/1970 01:00:00 door Willem vp
 
Jan Koehoorn

Jan Koehoorn

03/09/2006 11:49:00
Quote Anchor link
@ Lissy: in wat voor veldtype is de datum eigenlijk opgeslagen? En is het formaat dd-mm-yyyy?
 
Klaasjan Boven

Klaasjan Boven

03/09/2006 11:50:00
Quote Anchor link
lissy:
Helaas voor deze oplossing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$Date
           =""
$Date        = date("d-m-Y  (G:i)");

$strSQL ="SELECT * FROM tabel WHERE datum LIKE '2006-09-%'";
?>

ik heb ook dit geprobeerd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$strSQL
="SELECT * FROM tabel WHERE datum LIKE '%-09-2006'";
?>

krijg ik dit:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/sandokanshome/html/dagboek.php on line 293
regel 293 is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// Nu loop door de database heen
for($a=0; $a < mysql_num_rows($Result);$a++)
    {

            $Row = mysql_fetch_array($Result);
            $Row['Bericht'] = eregi_replace("\n", "<br>", $Row['Bericht']);
?>

de rest van de output......

edit : aanvulling


Heb je ook ergens staan
$Result=mysq_query($strSQL) or die mysql_error());

? ik neem aan van wel?
 
Lissy Pixel

Lissy Pixel

03/09/2006 12:01:00
Quote Anchor link
@ Willem_vp : Ja joh inderdaad de date moest zijn datum en dat veranderd dan geen foutmelding meer. Nu krijg ik alleen te zien dat er nog geen berichten zijn en dat is niet waar want er staat al wel wat aan data in voor de maand 09.
 
Jan Koehoorn

Jan Koehoorn

03/09/2006 12:04:00
Quote Anchor link
@ Lissy: nog even...

Als je veld een varchar was met als format dd-mm-yyyy, dan kun je in 1 keer je hele tabel opruimen. Maak een nieuw veld aan dat datum_goed heet. Het oude veld noem je datum_oud (of je past de naam in mijn voorbeeldquery aan):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
UPDATE tabel
SET
datum_goed = CONCAT(SUBSTRING(datum_fout, 7, 4), '-', SUBSTRING(datum_fout, 4, 2), '-', SUBSTRING(datum_fout, 1, 2))

Edit:

het nieuwe veld moet natuurlijk van het type DATE zijn ;-)
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Willem vp

Willem vp

03/09/2006 12:04:00
Quote Anchor link
lissy:
ik heb ook dit geprobeerd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$strSQL
="SELECT * FROM tabel WHERE datum LIKE '%-09-2006'";
?>
Die gaat niet werken, omdat de datum eruit ziet als "03-09-2006 (9:15)".

WHERE datum LIKE '%-09-2006%'

zou dus wel moeten werken. Ik heb dit zojuist op mijn eigen servers (MySQL 3.23.53 en 5.0.24) geprobeerd, en hier werkte het. Met je oorspronkelijke query lijkt dus niets mis te zijn.
 
Lissy Pixel

Lissy Pixel

03/09/2006 12:07:00
Quote Anchor link
@ Jan : het is een varchar en staat zo in de tabel: 02-9-2006 (22:17) en naar mijn weten dd-mm-jjjj en tijdstip.

@ Klaasjan : de fout heb ik al opgelost (zie hierboven) :)
 
Jan Koehoorn

Jan Koehoorn

03/09/2006 12:14:00
Quote Anchor link
Ja, met dingen als 02-9-2006 wordt het lastig voor MySQL ;-)
 
Klaasjan Boven

Klaasjan Boven

03/09/2006 12:19:00
Quote Anchor link
Draai het sqlletje van Jan of mijn scriptje en doe een datum nooit meer in een VARCHAR.
en de tijd ben je dan wel kwijt BTW
 
Lissy Pixel

Lissy Pixel

03/09/2006 12:43:00
Quote Anchor link
Helder voor het advies en inderdaad heb ik inmiddels een en ander over datum en tijd bijgeleerd dat wanneer er een nieuwe opzet zou komen ik dit anders zou doen :)
BEDANKT voor zover en ik ga nog aan de slag met de aanpassingen :)

@ Willem_vp : ik heb het draaien en vraag me niet waarom het nu wel draait....zal wel de vroege zondagmorgen zijn !!
In iedergeval zoals hierboven staat wederom veel geleerd en zal voor de toekomst een andere oplossing doen !!
Gewijzigd op 01/01/1970 01:00:00 door Lissy Pixel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.