MySQL - Pro Kategorie ein Eintrag

hamst0r

PC-Selbstbauer(in)
Hallo,
ich habe eine MySQL Tabelle, die folgendermaßen aufgebaut ist:
Code:
img                  thumbnail                       thema                    headline
--------------------------------------------------------------------------------------
pfad/img1.jpg        pfad/th/img1.jpg                thema1                   Thema 1
pfad/img2.jpg        pfad/th/img2.jpg                thema1                   Thema 1
pfad/img3.jpg        pfad/th/img3.jpg                thema2                   Thema 2
pfad/img4.jpg        pfad/th/img4.jpg                thema2                   Thema 2

Nun möchte ich mit pro "thema" ein zufälligen Datensatz bekommen.
 
SELECT * FROM 'tabelle' Where 'thema' = 'thema1' Order by RAND() LIMIT 1;

Sollte funktionieren...

EDIT: Wenn du jetzt für mehrere ein zufälliges haben willst musste das für jedes thema (1, 2, ... etc.) einzeln machen, anders geht das bei MySQL glaub ich nicht.

Man könnte evtl was mit subqueries machen... aber das mir jetzt zu viel Aufwand. ;)
 
noch nen kleiner verbesserungsvorschlag: wozu speicherst du die thumbnail position nochma einzeln? ich würd bei "img" einfach nur "img1" "img2" usw speichern und die thumb spalte weglassen. in der anwendung kennste den pfad zu deinem image und thumb ordner und kannst mit dem einen eintrag da alles andere herleiten.
 
JimSin: Danke, aber das würde nur von thema1 ein zufälligen Eintrag ausgeben oder? Ich möchte für jedes Thema ein Zufallseintrag haben.
Darkmo: Werde ich nochmal überdenken, würde natürlich Sinn machen. :)
 
JimSin: Danke, aber das würde nur von thema1 ein zufälligen Eintrag ausgeben oder? Ich möchte für jedes Thema ein Zufallseintrag haben.
Darkmo: Werde ich nochmal überdenken, würde natürlich Sinn machen. :)

Ist etwas aufwändiger, würde etwa so aussehen:
SELECT tabelle1.thema, (SELECT id FROM tabelle tabelle2 WHERE tabelle1.thema=tabelle2.thema ORDER BY RAND() LIMIT 1) AS 'id' FROM tabelle tabelle1 GROUP BY thema
 
Vielen Dank, jedoch benutze ich ein kleines selbstgeschriebenes Framework, womit so eine Abfrage leider nicht möglich ist.
Ich habe es jetzt hinbekommen und muss einfach mal hoffen, dass nicht zu viele verschiedene Themen entstehen, da bei jedem Thema eine Datenbankabfrage ausgeführt wird.
Ich habe es so gelöst, dass ich zuerst alle verschiedenen Themen mit "group by" auslese und dann bei jedem Thema ein Bild mit "order by rand() Limit 1" ausgelesen wird.
Vielen Dank für eure Hilfe.

Gruß hamst0r
 
hmm, könnte man nich vllt das random "db extern" gestalten? also jetzt mal plöde gesagt: rnd = random(); sql_query("select from where id = rnd"); - also jetz ganz ganz ganz grob pseudo code mäßig :ugly: id wird man schlecht nehmen können, weil die wird bei nem forum für die threads bestimmt ned ewig fortlaufend sein. also bsp themen-id's 1 2 4 6 7 gibts und rnd ergibt 3... ^^

aber vllt kannste dir ja die anzahl der themen per qry raussuchen lassen, dann von 1 bis anzahl ne zufallszahl ziehen und dann das thema an der position da raussuchen lassen. also bei der obigen liste und rnd = 3 sollte er dann das thema 4 ausgeben. hab mich scho länger ned mehr mit sql befasst, weis also grad ned, inwiefern das umsetzbar wäre >< aber eventuell isses ja ne idee wert ^^
 
DarkMo: Ich glaube du hast das falsch verstanden. Ich möchte nicht ein Zufallsthema bekommen, sondern für jedes Thema ein Zufallseintrag, ich habe ja jetzt eine Lösung, ich wollte nur wissen ob es mit weniger Datenbankabfragen geht. Solange die Themen nicht zu viele werden sollte es ja kein Problem sein mit meiner Lösung.

Supeq: Läuft ja jetzt, das wär mir jetzt zu umständlich. :P
 
Naja, wie viele Themen es gibt, ist doch eigentlich wurst. Da schreibste einfach ne Schleife und lässt da alle möglichen Themen durch rattern... Und fängst dann die Ergebnisse halt in nem Array auf.
 
Es wird aber pro Thema noch eine Datenbankabfrage gestartet. Hätte ich also 100 Themen, wären es 100 Datenbankabfragen pro Seitenaufruf.
Oder verlangsamen Datenbankabfragen nicht stark die Ladezeit?
 
Naja, theoretisch schon. Praktisch ist meiner Meinung nach eher die Größe des Ergebnisses relevant. Da du immer nur 1 ausgibst, sollte das nicht so wild sein. Das sind immer noch nur 100 rows bei 100 Abfragen... Langsam wird es bei 100 Themen dann, wenn du die 100 Themen inklusive Bilder auf einer Seite anzeigen lassen willst. ;)
 
Es wird pro Thema ein Bild angezeigt. ;) Aber ich denke es werden niemals mehr als 10-15 Themen werden.
Danke für eure Hilfe, habe aber noch ein kleines anderes Problem und finde den Fehler nicht.

Code:
$entry = preg_replace('#\[url=(.*)\]\[img\](.*)\[/img\]\[/url\]#isU', "<div class=\"image\"><a href=\"$1\"><img src=\"$2\" alt=\"Bild\"></a></div>", $entry);

Und folgender Code wird nicht umgewandelt
http://pastie.org/4308702
 
Code:
$entry = preg_replace('#\[url=(.*)\](.*)\[/url\]#isU', "<a href=\"$1\">$2</a>", $entry);
Funktioniert super und
Code:
$entry = preg_replace('#\[img\](.*)\[/img\]#isU', "<img src=\"$1\" alt=\"Bild\">", $entry);
auch. Daraus habe ich das erstellt. Funktioniert leider nicht, dann muss ich wohl weiter googlen. Danke trotzdem. :daumen:

Hab es raus, ist kein Fehler drin. Ich hatte einfach vor dem "Spezialfall" die URL-Umwandlung drin. Läuft jetzt alles.
 
Zuletzt bearbeitet:
Zurück