SELECT * FROM mehrere Tabellen. MySQL
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id
yeilds 5 Zeilen (5 arrays), die photo
ist das einzige Feld in einer Zeile. name, price
bekommen wiederholt (hier fanta-
name, price
wiederholen Sie 3 mal.) Wie kann ich loszuwerden, diese Duplikate?
Edit: ich will name, price
und alle photo
für jedes Getränk.
id name price
1. fanta 5
2. dew 4
id photo drinks_id
1. ./images/fanta-1.jpg 1
2. ./images/fanta-2.jpg 1
3. ./images/fanta-3.jpg 1
4. ./images/dew-1.jpg 2
5. ./images/dew-2.jpg 2
InformationsquelleAutor der Frage NestedWeb | 2012-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie hier tun, ist aufgerufen, eine
JOIN
(obwohl Sie es implizit, weil Sie wählen aus mehreren Tabellen). Dies bedeutet, wenn Sie nicht allen Bedingungen in Ihrem WHERE-Klausel, Sie hatte alle Kombinationen dieser Tische. Nur mit Ihrer Erkrankung, die Sie einschränken, Ihr beizutreten, um die Zeilen, wo der drink-id übereinstimmt.Aber es gibt noch X mehrere Zeilen im Ergebnis, für jedes Getränk, wenn es X Fotos mit diesem speziellen drinks_id. Dein statement nicht einschränken die Foto(s) du haben möchtest!
Wenn Sie möchten, dass nur eine Zeile pro trinken, muss man sagen, SQL, was, die Sie tun möchten, wenn es mehrere Zeilen mit einem bestimmten drinks_id. Für diese müssen Sie die Gruppierung und eine Aggregatfunktion. Sie erzählen SQL die Einträge, die Sie gruppieren möchten (zum Beispiel alle gleich drinks_ids) und WÄHLEN Sie die, die Sie haben, zu sagen, welcher der verschiedenen Einträge für jedes gruppierte Ergebnis Zeile genommen werden sollte. Für zahlen, das kann sein, Durchschnitt, minimum, maximum (um einige zu nennen).
In deinem Fall, ich kann nicht sehen, den Sinn für die Abfrage der Fotos für Getränke, wenn Sie nur eine Zeile. Sie dachte wahrscheinlich, Sie hätte eine Reihe von Fotos in Ihrem Ergebnis für jedes Getränk, aber SQL kann das nicht tun. Wenn Sie nur wollen alle Foto und Sie don ' T Pflege, die Sie erhalten, nur Gruppe durch die drinks_id (um nur eine Zeile pro Getränk):
In MySQL, wir haben auch GROUP_CONCATwenn Sie wollen, dass die Datei-Namen verkettet werden zu einem einzigen string:
Kann dies aber gefährlich, wenn Sie
,
im Bereich Werte, da die meisten wahrscheinlich, die Sie aufteilen möchten diese wieder auf der client-Seite. Es ist auch nicht standard-SQL-Aggregat-Funktion.InformationsquelleAutor der Antwort leemes
Haben Sie die doppelten Werte für name und Preis hier. Und ids sind doppelt, in der drinks_photos Tabelle.Es gibt keine Weise, die Sie Sie vermeiden können.Auch was genau Sie wollen die Ausgabe ?
InformationsquelleAutor der Antwort AnandPhadke
Um loszuwerden, Duplikate, können Sie die Gruppe durch
drinks.id
. Aber so bekommst du nur ein Foto für jedesdrinks.id
(das Foto erhalten Sie, abhängig von Datenbank-internen Umsetzung).Obwohl es nicht dokumentiert ist, im Falle von MySQL, erhalten Sie das Foto mit der niedrigsten
id
(in meiner Erfahrung habe ich nie gesehen, die anderen Verhalten).InformationsquelleAutor der Antwort bhovhannes