schweres Problem...
Lavender
- datenbank
0 globe0 Wilhelm Turtschan0 Vinzenz Mai0 Jonny 50 Jonny5
Hallo zusammen,
ich habe folgende Frage:
es sind 2 Tabellen (products, products_to_categories) vorhanden
nun möchte ich folgendes tun:
SELECT * FROM x.products, y.products_to_categories
WHERE x.products_status = '1'
AND y.categories_id = '22'
AND x.products_id = y.products_id
ORDER BY x.products_date_added DESC
LIMIT 0,9
Also:
Es sollen nur Artikel angezeigt werden, die auch in der zweiten Tabelle vorhanden sind (bei welcher auch noch unterschieden werden muss, ob der Wert zum zugehörigen Artikel 22 ist...
Hier mal ein Auszug:
products
--------
products_id|products_quantity|products_date_added|products_status
1 | 100 | 22.12.01 | 1
2 | 100 | 23.12.01 | 1
3 | 100 | 24.12.01 | 1
4 | 100 | 21.12.01 | 1
5 | 100 | 25.12.01 | 1
products_to_categories
--------
products_id | categories_id
1 | 21
2 | 22
3 | 22
4 | 22
5 | 23
n'abend,
Es sollen nur Artikel angezeigt werden, die auch in der zweiten Tabelle vorhanden sind (bei welcher auch noch unterschieden werden muss, ob der Wert zum zugehörigen Artikel 22 ist...
und deine Frage ist nun?
weiterhin schönen abend...
Das der Befehl nicht funktioniert...
Kurz nochmal - es soll nach Datum sortiert werden, aber nur Artikel angezeigt werden, die in der zweiten Tabelle mit der richtigen (hier: 22) Kat eingetragen sind.
Nur wie gesagt funktioniert mein Zugriff kein Stück -.-
Gruß und schönen Sonntag noch
Lavender
Kurz nochmal - es soll nach Datum sortiert werden, aber nur Artikel angezeigt werden, die in der zweiten Tabelle mit der richtigen (hier: 22) Kat eingetragen sind.
Nur ein paar Anregungen:
Zur Problembeschreibung:
Abfrage besser skizzieren, erwartete Daetnsatzmenge genauer beschreiben
Hallo,
danke für deine Antwort.
Es scheint UNION nicht in Mysql zu arbeiten... selbst diese einfache Union bekommt er nicht hin:
SELECT products_id FROM products UNION
SELECT categories_id FROM products_to_categories
Fehler:
#1064 - You have an error in your SQL syntax near 'UNION SELECT categories_id FROM products_to_categories
LIMIT 0, 30 ' at line 1
oO
Gruß
Lavender
Hallo Hamstar,
Nur ein paar Anregungen:
oh je.
- zwei Tabellen => UNION-Operator
Nein, wie globe bereits anmerkte, ist JOIN der richtige Weg. Was Lavender verwendet, ist übrigens die implizite JOIN-Syntax.
- sortieren => SORT BY-Klausel
Nein, das geht mir ORDER BY, ganz genauso wie Lavender bereits schrieb.
- ähnliche Einträge in Tabelle 1 und 2 suchen => HAVING-Klausel
HAVING hat damit überhaupt nichts zu tun, HAVING ist nur sinnvoll im Zusammenhang mit Aggregatsfunktionen und GROUP BY.
Zur Problembeschreibung:
Abfrage besser skizzieren, erwartete Daetnsatzmenge genauer beschreiben
Ich fand, dass Lavender gut beschrieben hat, was als Ergebnis erwartet wird.
Freundliche Grüße
Vinzenz
Ich fand, dass Lavender gut beschrieben hat, was als Ergebnis erwartet wird.
Zitat:
"es sind 2 Tabellen (products, products_to_categories) vorhanden
nun möchte ich folgendes tun:
[...]
Also:
Es sollen nur Artikel angezeigt werden, die auch in der zweiten Tabelle vorhanden sind"
Deswegen bin ich auf den UNION-Operator gekommen, "Artikel, die auch in der zweiten ...". Mit dem HAVING gedachte ich die Dubletten zu packen zu kriegen, einen Schreibfahler habe ich auch noch produziert.
Tja, es ist oft ein Kunststück, finde ich, Datenmodellanforderungen zu antizipieren (oder zu verstehen), beim Tabellennamen 'products_to_categories' (eine "n:m"-Beziehung?) hats bei mir ausgesetzt (und ich habe fehlerhafterweise "das Schlimmste" angenommen).
Allerdings finde ich es ganz gut auch wenn man nur wenig von der Anforderung verstanden hat, versuchen zu helfen. Oder? ODER? ;)
Hallo
Ich fand, dass Lavender gut beschrieben hat, was als Ergebnis erwartet wird.
"es sind 2 Tabellen (products, products_to_categories) vorhanden
nun möchte ich folgendes tun:
[...]
Also:
Es sollen nur Artikel angezeigt werden, die auch in der zweiten Tabelle vorhanden sind"
Deswegen bin ich auf den UNION-Operator gekommen, "Artikel, die auch in der zweiten ...".
nö, das ist die exakte Anforderung für einen INNER JOIN, für UNION müsste es heißen:
"Es sollen alle Artikel angezeigt werden, die sowohl in der ersten als auch in der zweiten Tabelle enthalten sind."
Mit dem HAVING gedachte ich die Dubletten zu packen zu kriegen, einen Schreibfahler habe ich auch noch produziert.
HAVING hat mit "Dubletten packen" nun herzlich wenig zu tun.
Allerdings finde ich es ganz gut auch wenn man nur wenig von der Anforderung verstanden hat, versuchen zu helfen. Oder? ODER? ;)
Dein Versuch ist leider komplett daneben gegangen. Aber tröste Dich, da stehst Du nicht allein. [1]
Freundliche Grüße
Vinzenz
[1] Ich nehme mich selbst nicht aus.
n'abend,
Kurz nochmal - es soll nach Datum sortiert werden, aber nur Artikel angezeigt werden, die in der zweiten Tabelle mit der richtigen (hier: 22) Kat eingetragen sind.
die Query, die du haben möchtest, ist kein Hexenwerk. Ich denke, dass du dir mal Einführung in Joins durchlesen solltest und bei Bedarf evtl mal bei Fortgeschrittene Jointechniken vorbeischauen willst.
Nur wie gesagt funktioniert mein Zugriff kein Stück -.-
hast du dir denn die Fehlermeldung angeschaut?
weiterhin schönen abend...
habe d'ehre Lavender
SELECT * FROM x.products, y.products_to_categories
WHERE x.products_status = '1'
AND y.categories_id = '22'
AND x.products_id = y.products_id
ORDER BY x.products_date_added DESC
LIMIT 0,9
Koennte u.U. daran liegen, dass die ersten beiden AND-Klauseln noch keine Verknuepfung kennen.
WHERE x.products_id = y.products_id
AND x.products_status = '1'
AND y.categories_id = '22'
man liest sich
Wilhelm
Hallo Lavender
SELECT * FROM x.products, y.products_to_categories
Heißen Deine Tabellen x.products oder products, y.products_to_categories oder products_to_categories? Wolltest Du mit Aliasnamen arbeiten? Davon gehe ich mal aus:
WHERE x.products_status = '1'
AND y.categories_id = '22'
AND x.products_id = y.products_id
ORDER BY x.products_date_added DESC
LIMIT 0,9
Es sollen nur Artikel angezeigt werden, die auch in der zweiten Tabelle vorhanden sind (bei welcher auch noch unterschieden werden muss, ob der Wert zum zugehörigen Artikel 22 ist...
[code lang=sql]SELECT
p.products_id, -- einmal sollte reichen
p.products_quantity,
p.products_date_added,
p.products_status,
pc.categories_id
FROM products p -- Aliasname p für Tabelle products
INNER JOIN products_to_categories pc -- Aliasname pc für Verknüpfungstabelle
ON p.products_id = pc.products_id -- explizite Join-Syntax
WHERE p.product_status = 1 -- bnur Produkte mit Status 1
AND pc.categories = 22 -- nur solche aus der Kategorie 22
ORDER BY p.products_date_added DESC -- wie von Dir gewünscht sortiert
LIMIT 0, 9 -- Ergebnismenge beschränken
[/ code]
sollte mit Deinen Ausgangsdaten
products
products_id|products_quantity|products_date_added|products_status
1 | 100 | 22.12.01 | 1
2 | 100 | 23.12.01 | 1
3 | 100 | 24.12.01 | 1
4 | 100 | 21.12.01 | 1
5 | 100 | 25.12.01 | 1products_to_categories
products_id | categories_id
1 | 21
2 | 22
3 | 22
4 | 22
5 | 23
das von Dir gewünschte Ergebnis liefern
products_id|products_quantity|products_date_added|products_status |categories_id
--------------------------------------------------------------------------------
3 | 100 | 24.12.01 | 1 | 22
2 | 100 | 23.12.01 | 1 | 22
4 | 100 | 21.12.01 | 1 | 22
Freundliche Grüße
Vinzenz
Guten Abend Vinzenz,
vielen, vielen Dank - das war genau das, was ich gebraucht habe! - Nach ein paar kleinen Anpassungen läuft es 1a - danke nochmal.
Viele Grüße
Lavender
PS: danke auch an alle anderen, die sich die Mühe gemacht haben, meine Frage zu verstehen und mir zu helfen - schönen Restsonntag und nen leichten/ruhigen Montag ;)
Hi,
sieh mal fürs Verständnis:
http://www.w3schools.com/sql/sql_join.asp
Ansonsten schliesse ich mich Lavenders Ausführungen an.
herzliche Grüsse,
Jonny 5
Ansonsten schliesse ich mich Lavenders Ausführungen an.
meinte natürlich Vinzenz :D
cy@,
Jonny5