kostenloser Webspace werbefrei: lima-city


Oder/Und-Bedingung findet den Fehler

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Hallo, könnt ihr das Problem Sehen :slant:? 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'))
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Anscheinend gibt es keinen Datensatz, bei dem alle Bedingungen zutreffen. Genau das verlangst Du aber mit deinem Query!
  4. Du solltest deine Quellcode am besten übersichtlicher gestalten. Dann findest du auch viel schneller Fehler!
  5. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    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. :wave:

    Beitrag zuletzt geändert: 24.5.2012 0:35:47 von pixilab
  6. pixilab schrieb:
    ... Der erste funktioniert und findet 2 gleiche IDs, der zweite findet nichts, ...
    anbetracht dessen sehe ich keine der beiden aussagen bestätigt! also man bittet um exakte aus-/angaben.

    fuhnefreak schrieb:
    Du solltest deine Quellcode am besten übersichtlicher gestalten. Dann findest du auch viel schneller Fehler!
    das ist richtig, nur bei sql ist das formatieren etwas umständlicher als bei php/html/... ;) ich würde seine abfrage so gestalten:
    query_1
    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')
          )

    query_2
    dito mit AND
    die begründung ist einfach: in einer zwile sollte nichts wiederholt werden!
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!