Webstatt.org - Community seit 2006 - 2012 (2024?)

Zufallsdatensatz

Avatar user-325
29.12.2006 18:26

Hi!

Komme bei einer MySQL-Abfrage nicht weiter traurig 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

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
user-137
29.12.2006 18:42

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


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

Avatar user-325
29.12.2006 18:55

Original von user-137
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.

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
user-343
29.12.2006 19: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 zwinkern

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

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



(@BSN, dein Query ist fehlerhaft.)

Avatar user-236
29.12.2006 20: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);


signature in progress
Avatar user-182
30.12.2006 00:48

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

Seid ihr auch schon wix'r? xD
Avatar user-325
30.12.2006 07:29

Schlecht frech

Ich brauche ja einen Datensatz für jede Kategorie.

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
Avatar user-325
30.12.2006 15:35

Erstmal danke an alle, die geholfen haben lächeln

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`

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM