Ich versuche eine MySQL-Abfrage zu schreiben, die Element zurückgeben wird, deren Details erfüllen dies, aber nicht dieses Kriterium.mysql, Abfrage von zwei verknüpften Tabellen Rückgabe Id von ersten based die Sekunden Details Treffen eine dies aber nicht dieses Kriterium
Betrachten Sie als Beispiel ein Bestandsverwaltungssystem für Bürobedarf. In dieser Datenbank würden alle Arten von Zubehör enthalten sein, und anstatt eine Tabelle mit einer Vielzahl von Spalten zu erstellen, habe ich stattdessen jedes Attribut einer Produktbeschreibung verwendet.
Mithilfe dieser Tabellen kann jedes Produkt als Inventar hinzugefügt werden und seine Attribute können als Inventardetails hinzugefügt werden. (z. B. label = color, attribute_string = red oder label = color, attribute_string! = blue) Kritisieren Sie diese Methode nicht, worum es bei meiner Frage geht. Außerdem erlaubt mir diese Methode, die Anzahl der Details über ein Produkt, das gespeichert wird, ständig zu ändern, ohne die Datenbank in irgendeiner Weise ändern zu müssen.
Meine Frage ist, wie meine Anfrage aussehen soll, wenn ich eine Liste aller grünen Produkte erhalten möchte, die positiv gezählt werden. Im Grunde suche ich nach einer Abfrage, die element.id zurückgibt, und die Elemente müssen nach ausgenommenen Details und nicht vorhandenen Details sortiert werden. Zum Beispiel:
SELECT element.id
FROM element
INNER JOIN element_detail ON element.id = element_detail.id
WHERE (element_detail.label = 'color'
AND element_detail.attribute_string = 'green')
AND (element_detail.label = 'count'
AND element_detail.attribute_integer <> 0);
####################################
# INVENTORY #
####################################
# id # label #
####################################
# 1 # multi color pen pack #
# 2 # single pen pack (red) #
# 3 # single pen pack (green) #
# 4 # single pen pack (black) #
# 5 # single pen pack (blue) #
# 6 # single pen pack (purple) #
####################################
########################################################
# INVENTORY_DETAILS #
########################################################
# id # element_id # label # attribute_string #
########################################################
# 1 # 1 # color # red #
# 2 # 1 # color # blue #
# 3 # 1 # color # black #
# 4 # 1 # color # green #
# 5 # 1 # color # red #
# 6 # 1 # count # 100 #
# 7 # 2 # color # red #
# 8 # 2 # count # 50 #
# 9 # 3 # color # green #
# 10 # 3 # count # 50 #
# 11 # 4 # color # black #
# 12 # 4 # count # 50 #
# 13 # 5 # color # blue #
# 14 # 5 # count # 0 #
# 15 # 5 # color # purple #
# 16 # 5 # count # 50 #
########################################################
Eine Abfrage, die alle Produkte im Inventar zurückkehren und ihre Zählung, die die Farbe rot, aber nicht grün hat.
########################################
# RESULT #
########################################
# PRODUCT # COUNT #
# single pen pack (red) # 50 #
# single pen pack (black) # 50 #
# single pen pack (blue) # 0 #
# single pen pack (purple) # 50 #
########################################
Während das mutli Farbstift Pack einen roten Farbstift hat es hat auch eine grüne Farbstift, und soll nicht im Ergebnis enthalten sein.
'die elments nach Angaben sortiert werden müssen, die und diejenigen ausgenommen sind, die not' sind -> Keine Ahnung was das bedeutet. Können Sie einige Beispieldaten aus Ihren Tabellen und Ihr erwartetes Ergebnis in einem Tabellenformat bereitstellen? Das würde sehr helfen. [Beispiel] (http://stackoverflow.com/questions/10083089/sql-query-to-group-the-data-from-two-tables) –
Beachten Sie, dass die Antwort auf Ihre Frage zur Rückgabe von Produkten mit 'grün' isn Für die andere Frage, die Sie erwähnt haben, gilt, dass Sie Produkte zurückgeben, die nicht "grün" sind, auch wenn sie andere Farben haben. Dazu müssten Sie eine Unterabfrage für Produkte mit "Grün" durchführen und NOT IN für diese Produktliste verwenden. – octern