Oder/Und-Bedingung findet den Fehler
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anbetracht
angabe
ausgabe
aussage
bedingung
code
datenbank
denkfehler
folgender code
gestalten
gleiche code
leeres resultat
null
ordnung
problem
quellcode
schneller fehler
url
zeile
zweiten code
-
Hallo, könnt ihr das Problem Sehen ? Folgender Code ist gegeben. Der erste funktioniert und findet 2 gleiche IDs, der zweite findet nichts, obwohl die Einträge in der Datenbank vorhanden sind und die doppelte ID aufgelistet werden müsste. Das ist genau der gleiche Code, nur dass bei "'Oval')) OR" anstelle des OR ein AND steht. Ich komme nicht dahinter, warum beim zweiten Code Null rauskommt. Hab ich vielleicht einen Denkfehler bei der Verundung?
SELECT s_id FROM `on_smw_rels2` WHERE (p_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Blattform') AND o_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Oval')) OR (p_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Ordnung') AND o_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Rosenartige'))
SELECT s_id FROM `on_smw_rels2` WHERE (p_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Blattform') AND o_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Oval')) AND (p_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Ordnung') AND o_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Rosenartige'))
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Anscheinend gibt es keinen Datensatz, bei dem alle Bedingungen zutreffen. Genau das verlangst Du aber mit deinem Query!
-
Du solltest deine Quellcode am besten übersichtlicher gestalten. Dann findest du auch viel schneller Fehler!
-
Also ich hab das Nochmal getrennt ausgeführt.
SELECT s_id FROM `smw_rels2` WHERE (p_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Ordnung') AND o_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Rosenartige'))
Ausgabe: s_id: 90, 115, 162, 200, 315, 323, 332, 348, 350,
Und
SELECT s_id FROM `smw_rels2` WHERE (p_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Blattform') AND o_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Oval'))
Ausgabe: s_id: 90
Zur Übersicht:
select_a = p_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Ordnung') AND
o_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Rosenartige')
select_b = p_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Blattform') AND
o_id IN (SELECT smw_id FROM `smw_ids` WHERE smw_title ='Oval')
Daraus Folgt:
SELECT s_id FROM `smw_rels2` WHERE (select_a) OR (select_b)
Ausgabe: s_id: 90, 90, 115, 162, 200, 315, 323, 332, 348, 350,
Und mit Und
SELECT s_id FROM `smw_rels2` WHERE (select_a) AND (select_b)
Ausgabe: MySQL lieferte ein leeres Resultat zurück (d.h. null Zeilen).
Eigentlich erwarte ich in der Ausgabe: s_id: 90 Aber da kommt Null. Ich habe keine Idee, wie man sonst auf die 90 kommen sollte.
Beitrag zuletzt geändert: 24.5.2012 0:35:47 von pixilab -
pixilab schrieb:
anbetracht dessen sehe ich keine der beiden aussagen bestätigt! also man bittet um exakte aus-/angaben.
... Der erste funktioniert und findet 2 gleiche IDs, der zweite findet nichts, ...
fuhnefreak schrieb:
das ist richtig, nur bei sql ist das formatieren etwas umständlicher als bei php/html/... ;) ich würde seine abfrage so gestalten:
Du solltest deine Quellcode am besten übersichtlicher gestalten. Dann findest du auch viel schneller Fehler!
query_1SELECT s_id FROM `on_smw_rels2` WHERE (p_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Blattform') AND o_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Oval') ) OR (p_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Ordnung') AND o_id IN (SELECT smw_id FROM `on_smw_ids` WHERE smw_title ='Rosenartige') )
query_2
die begründung ist einfach: in einer zwile sollte nichts wiederholt werden!dito mit AND
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage