![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() Betreff is schlecht, aber mir fallt kein gscheiter ein.
Das ganze soll mit mysql funzen - ich hab (extrem vereinfacht ![]() Ein Tabelle Zutaten, eine Tabelle Bilder Es gibt mehrere Bilder für eine Zutat. Ich möchte jetzt für zb Zutat 1,2,3 (ist natürlich ein dynamischer Wert der 1-10 Werte groß is) jeweils _ein_ zufälliges Bild aus der Bildertabelle nehmen und ausgeben. Also einmal: Tequila -> Olmeca-Bild, nächstes mal Sierra-Bild, etc. Grundsätzlich schaut die Abfrage für alle Bilder so aus: SELECT BildURL From tblBilder INNER JOIN tblZutaten ON tblBilder.Zutat_ID=tblZutaten.Zutat_ID WHERE tblZutaten.Zutat_ID IN (1,2,3) Mögliche Lösung ist, für jede Zutat eine Unterabfrage machen, dabei kommen dann 20 Unterabfragen in der wirklichen query raus (geht nicht nur für Zutaten, sondern auch für Deko, Gläser, Zubereitung, ...). Zweite Lösung wäre immer nur ein Bild pro Zutat einzutragen -> langweilig. In Wirklichkeit soll die Funktion folgendes machen: Für einen Cocktail vier zufällige Bilder auslesen, die sich aus Zutaten, Dekoration, Gläsern und Zubereitung des Cocktails ergeben. Aber wenn ich mal wüsst wie ich das Problem oben lös, krieg ich das hin ![]() hoffe irgendwer versteht mich und weiß mir zu helfen mfg Thomas |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() Ich schätz mal du gibst es nachher mit php aus. Also wird's wohl das einfachste sein, alle Werte für BildUrl in ein Array einzulesen und zufällig eins auszuwählen.
Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#3 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() Ja könnt ich natürlich machen, es wäre nur einfacher, wenns über sql ginge.
![]() Wenns nur um ein paar Werte ginge würd ichs eh machen, aber nachdem ich da ca 20-30 Bilder zrückkrieg von denen je ca. 2-3 "gleich" sind is das relativ zach, weil eben die wirkliche Tabelle noch weitere zu vergleichende Felder beinhaltet ![]() mfg Thomas ps: hab mal eine erste version online-gestellt, siehe hier http://tdt.td.ohost.de/php/singleview.php?C_ID=91 wenn man paar mal neu-laden drückt sollt sich was ändern ![]() |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 26.09.1999
Beiträge: 2.569
|
![]() Am Schluß deiner Abfrage:
Code:
ORDER BY RAND() LIMIT 1 gruss, snowman
____________________________________
MediaMarkt? Ich bin doch nicht blöd, Mann! Vorsprung durch Technik Lesen Sie keine Anleitungen, FAQs, Readme - Files. Reine Zeitverschwendung. In den Newsgroups und Foren gibt es genug kompetente Leute, die mit großer Geduld immer wieder dieselben einfachen Fragen beantworten. Völlig kostenlos noch dazu! |
![]() |
![]() |
![]() |
#5 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() ja, so ähnlich mach ich das momentan auch. das funktioniert aber nur, wenn ich nur für eine Zutat ein zufälliges Bild haben will.
Wenn ich aber für mehrere Zutaten, bei denen mehrere Bilder rauskommen (3 Zutaten mit je 3 Bildern, macht 9 Bilder) jeweils ein Bild/Zutat haben will geht das nicht ![]() also (sagen wir mal vereinfacht): tblZutaten: 100 Zutaten tblBilder: 300 Bilder, 3 pro Zutat ich hab: Zutat_ID 1,2 und 3 und will für jede Zutat _jeweils ein_ Bild. Also quasi insgesamt 3 Bilder für diese Abfrage. Mögliche Lösung schaut so aus: Code:
SELECT BildURL From tblBilder WHERE tblBilder.Bild_ID IN ( (SELECT Bild_ID from tblBilder WHERE Zutat_ID=1 ORDER BY Rand() LIMIT 0,1), (SELECT Bild_ID from tblBilder WHERE Zutat_ID=2 ORDER BY Rand() LIMIT 0,1), (SELECT Bild_ID from tblBilder WHERE Zutat_ID=3 ORDER BY Rand() LIMIT 0,1) ) ![]() ![]() mfg Thomas |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 26.09.1999
Beiträge: 2.569
|
![]() Das würde ich in PHP über eine Schleife für Zutat_ID machen.
gruss, snowman
____________________________________
MediaMarkt? Ich bin doch nicht blöd, Mann! Vorsprung durch Technik Lesen Sie keine Anleitungen, FAQs, Readme - Files. Reine Zeitverschwendung. In den Newsgroups und Foren gibt es genug kompetente Leute, die mit großer Geduld immer wieder dieselben einfachen Fragen beantworten. Völlig kostenlos noch dazu! |
![]() |
![]() |
![]() |
#7 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() Meinst du das schreiben des Sql-Strings oder einfach alles aulesen und danach doppeltes rausschmeißen?
Hm, am besten wärs wohl beides zu testen und das schnellere zu nehmen - Ich mach halt nur gern möglichst viel Datenbankseitig, wenns um sowas geht ![]() In Wirklichkeit würde das ganze mit verschachtelten Selects so aussehen: Code:
SELECT BildURL From tblBilder WHERE tblBilder.Bild_ID IN ( (SELECT Bild_ID from tblBilder WHERE ID_Name='Z_ID' AND ID_Wert=1 ORDER BY Rand() LIMIT 0,1), (SELECT Bild_ID from tblBilder WHERE ID_Name='Z_ID' AND ID_Wert=2 ORDER BY Rand() LIMIT 0,1), (SELECT Bild_ID from tblBilder WHERE ID_Name='Z_ID' AND ID_Wert=3 ORDER BY Rand() LIMIT 0,1) (SELECT Bild_ID from tblBilder WHERE ID_Name='Z_ID' AND ID_Wert=4 ORDER BY Rand() LIMIT 0,1) (SELECT Bild_ID from tblBilder WHERE ID_Name='Z_ID' AND ID_Wert=5 ORDER BY Rand() LIMIT 0,1) ) OR tblBilder.Bild_ID IN ( (SELECT Bild_ID from tblBilder WHERE ID_Name='D_ID' AND ID_Wert=1 ORDER BY Rand() LIMIT 0,1) (SELECT Bild_ID from tblBilder WHERE ID_Name='D_ID' AND ID_Wert=2 ORDER BY Rand() LIMIT 0,1) ) OR tblBilder.Bild_ID IN ( (SELECT Bild_ID from tblBilder WHERE ID_Name='G_ID' AND ID_Wert=22 ORDER BY Rand() LIMIT 0,1) ) mfg Thomas ![]() |
![]() |
![]() |
![]() |
#8 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() Jo mai, ich hab jetz einfach ne Suchschleife drübergelegt, die doppelte IDs sucht und raushaut. Beim Datenbankauslesen tu ichs gleich zufällig sortieren, damit fällt mir das fürs array auch weg.
herzlichen Dank für eure Anregungen ![]() mfg Thomas |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|