Willkommen in der Webstatt
User-1 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?
User-2 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.

User-1 am 29.12.06 19:55

Quote
Original von xyz-27
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.

User-3 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.)

User-4 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);

User-5 am 30.12.06 01:48

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

User-1 am 30.12.06 08:29

Schlecht :P

Ich brauche ja einen Datensatz für jede Kategorie.

User-1 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