Willkommen in der Webstatt Zum Webstatt Blog und Stories
Thiemm Thiemm am 29.12.06 19:26

Hi!

Komme bei einer MySQL-Abfrage nicht weiter :( Die Tabelle sieht so aus:

Feld1 | Kategorie | Feld2
123 | foo | abc
456 | foo | def
789 | bla | ghi
012 | bla | jkl
345 | bla | mno

Nun möchte ich jeweils einen Eintrag für jede Kategorie. Dieser soll zufällig sein.
Wie sieht die Abfrage aus?
SELECT `Feld1`, `Feld2` FROM `db` ....?

MfG

netcup.de Warum gibt es hier Werbung?
BNightSpeeder am 29.12.06 19:42

mysql_query("SELECT * FROM kategorie WHERE id ORDER BY " . srand(microtime()*1000000) . " rand() limit 1");

und das dan drei mal wobei du kategorie durch eben alle kategorien ersetzt.

Thiemm Thiemm am 29.12.06 19:55

Quote
Original von BNightSpeeder
und das dan drei mal wobei du kategorie durch eben alle kategorien ersetzt.

Genau das wollte ich ja vermeiden. Die Anzahl der Kategorien ist nicht immer gleich.

Wasili am 29.12.06 20:13

Naja. Ich hab grad ein wenig mit Groub by rumgespielt. Leider sortiert ein "order by rand()" lediglich nach Kategorie - Leider nicht nach was anderem.

Deshalb bleibt dir wohl nichts anderes übrig, als zuerst die Kategorieren auszulesen, und dann Kategorie für Kategorie einen zufälligen Eintrag. Es sei denn, hier kennt jemand n' Trick, der das ganze unnötig macht ;)

$res = mysql_query('SELECT *
FROM `zdsmk`
GROUP BY `Kategorie`
LIMIT 0 , 30');

while($row = mysql_fetch_assoc($res)) {
$res2 = mysql_query('SELECT * FROM `zdsmk` WHERE `Kategorie` = "'.$row['Kategorie'].'" ORDER BY rand('.mt_rand().')');
}



(@BSN, dein Query ist fehlerhaft.)

mab mab am 29.12.06 21:20

Hi zusammen.

Hab noch eine Idee. Das Script hatte ich bei mir im Einsatz und mit einer "ordentlichen" Abfrage läuft das. Vielleicht kommst du damit auf eine Lösung.


// irgendein query
$result = mysql_query($sql, $link);

$gesamt = mysql_result($result,0);

// generator starten
mt_srand(time());

// zufallszeile
$zeile = mt_rand(0,$gesamt-1);

// sprung zur zeile per zufall
mysql_data_seek($result,$zeile);

$row = mysql_fetch_row($result);

// ausgeben
while{

}

// Speicher wieder freigeben
mysql_free_result($result);

Franky Franky am 30.12.06 01:48

wie wäre es mit einfach nur ORDER BY RAND()?

Thiemm Thiemm am 30.12.06 08:29

Schlecht :P

Ich brauche ja einen Datensatz für jede Kategorie.

Thiemm Thiemm am 30.12.06 16:35

Erstmal danke an alle, die geholfen haben :)

Ich wusste doch, dass es mit einer Query geht. Des Rätsels Lösung ist eine Subquery:
SELECT * FROM (SELECT * FROM `table` ORDER BY RAND()) AS `test` GROUP BY `category`

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt