Hoi allemaal,

Ik ben al een tijdje bezig met het zichtbaar krijgen van de items van de maand. Het is dus de bedoeling dat ik een lijstje krijg met de best bekeken items van de maand, mocht het de eerste van de maand zijn en nog niet genoeg items in de best bekeken hebben dan zou hij naar de vorige maand moeten kijken.

Hieronder heb ik de code staan die ik tot nu toe heb. Sorry dat het er niet meer netjes uitziet, ik heb er al zoveel mee geprobeert dat ik er zelf niet meer uitkom.

De eerste query is om te kijken of er voldoende items al bekeken zijn, mocht dit niet het geval zijn moet hij $maand - 1 doen, dus naar de vorige maand.

<?

$timestamp = strtotime("now");
//$maand = date("m", $timestamp);
$maand = 7;
if ($maand < 10) { $maand = "0$maand"; }

$sqlm = "SELECT distinct id, count(*) as cnt FROM itemcount WHERE date LIKE '%-".$maand."-%' GROUP BY id ORDER BY cnt DESC, id LIMIT 0,$limit";
$resm = mysql_query($sqlm) or die("SELECT Error: ".mysql_error());
$items = mysql_num_rows($resm);
echo $items;
echo " ";
if ($items < 10) { $maan = --$maand; } else { $maan = $maand; }

if ($maan < 10) { $maan = "0$maan"; }

$sqlc = "SELECT distinct id, item, timestamp, count(*) as cnt FROM itemcount WHERE date LIKE '%-".$maan."-%' GROUP BY id ORDER BY cnt DESC, id LIMIT 0,$limit";
$resc = mysql_query($sqlc) or die("SELECT Error: ".mysql_error());
$item = mysql_num_rows($resc);
echo $item;
echo " ";

?>

Ik hoop dat ik het een beetje begrijpend heb kunnen uitleggen.
Alvast bedankt voor jullie tijd en moeite..
Dus met andere woorden moet ik alle 20.000 entries veranderen voor het kan werken??
@Jan: De tabelnaam 'date' is in principe fout, maar omdat deze fout zo ongelovelijk vaak wordt gemaakt, heeft MySQL deze naam maar geaccepteerd als tabelnaam. Dat geeft dus geen problemen. Toch raad ik het af, het is dan niet duidelijk of je nu de tabelnaam of de functie bedoelt: DATE(date) is een correct stukje SQL, maar het heeft niet mijn voorkeur.
Rico schreef op 10.11.2006 13:59
Dus met andere woorden moet ik alle 20.000 entries veranderen voor het kan werken??
Helemaal correct! Je hebt namelijk onzin in je database gezet!

Oplossing: Maak even een nieuwe kolom aan, bv. met de naam 'iso_date' (het is tenslotte een iso-formaat). En ga dan de volgende query op jouw tabel loslaten:

Edit: deze query mag je snel vergeten!

Deze werkt uitstekend wanneer de boel in de kolom 'date' is opgeslagen in het formaat dd-mm-yyyy

Edit:
Nadat je de kolom 'iso_date' keurig hebt gevuld (en even gecontroleerd of alles goed is) kun je de kolom 'date' verwijderen. Alle queries de gebruik maakten van de kolom 'date' moet je natuurlijk gaan aanpassen, die moeten nu gebruik maken van iso_date waar nu een échte datum in staat.
Met die query krijg ik wel heel rare data's te zien.. :)

van 04-04-2006 maakt hij dan 6002-40-40

:)
Volgens mij mag dit hem worden:

UPDATE
  tabelnaam
SET
  iso_date = CONCAT(
    SUBSTRING(date, 7, 4),
    '-',
    SUBSTRING(date, 4, 2),
    '-',
    SUBSTRING(date, 1, 2)
  )

Wederom niet getest...
Die CONCAT werkte perfect.. :) Dank je.

Nu heb ik alles omgezet naar iso_date en date verwijderd, en nu doet hij het dus wel als ik het goed zie. Alleen is er een mogelijkheid dat ik kan kijken naar de vorige maand om te testen dat hij alleen deze maand pakt. ??

In ieder geval heel erg bedankt. :)

Met testen kun je de WHEN even aanpassen, je hebt nu in de query staan:
WHEN DAYOFMONTH(CURDATE()) = 1

Maak van die 1 even een 10 (het is vandaag de 10e!) en je hoort de gegevens van de vorige maand te krijgen.
Ok nu ga ik ff dom zitten doen zie ik... lol Ik heb 6 maanden weinig gedaan met php en sql en ik ben alles vergeten lijkt wel.. :(
Maar als ik het goed begrijp kan ik beter geen date gebruiken maar iso_date, of kan datum wel ??

En als ik het per week wil laten zien, kan ik dan MONTH vervangen door WEEK of is het niet zo simpel ?? :)

Reageren