2 SQL Abfragen zusammenfassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 2 SQL Abfragen zusammenfassen

    Hallo,

    ich habe vor kurzen ein System aufgebaut, welches im Moment auf 2 SQL Abfragen basiert. Ich möchte diese nun zu einer zusammenfassen, wenn dies möglich ist.
    Dazu bräuchte ich Eure Hilfe ;)

    Ich hab zwei Tabellen:

    portal_items
    -itemID
    -description
    -active (beschreibt per 0 und 1 ob der Artikel angezeigt werden soll)
    -...

    user_items
    -userID
    -itemID
    -...

    Alle Daten aus 'portal_items' werden dem User aufgelistet.
    Unter jedem Eintrag soll es nun zwei Alternativen geben.
    1) Wenn der User dieses Item noch nicht in einen "Korb" hat, soll er ein Button sehen, mit dessen er dieses Item in sein Korb legen kann. (user_item wird gefüllt)
    2) Wenn der User bereits einen Eintrag in user_items hat, soll dort anstelle eines Buttons der Text "Item bereits vorhanden" stehen.

    Wie gesagt, läuft das System momentan auf zwei Abfragen.
    Meine erste Ansätze um einen Query zu erstellen sehen folgender Maßen aus:

    Quellcode

    1. SELECT portal.*, user.*
    2. FROM portal_items portal
    3. LEFT JOIN user_items user
    4. ON(portal.itemID = user.itemID)
    5. WHERE portal.active = 1 AND user.userID = $aktuelleUserID


    Das Problem bei dieser Abfrage ist, das er nur die Daten auflistet, wo bereits ein Eintrag in user_items besteht.
    Und einfach alles aus dieser Tabelle will ich nicht 'selecten', da dort einfach zu viele User stehen.

    Könnt Ihr mir helfen? :D
    Vielleicht habe ich lediglich einen Denkfehler^^

    Danke und Gruß,
    Tobbes :)
  • Das sind doch zwei unabhängige Queries.
    Die solltest du entweder mit einem UNION zusammenfassen, oder mit die Abfragen bedingend machen - also, so bauen, dass die Linke Seite des JOINs nicht leer sein darf.

    Beispiele:

    Quellcode

    1. SELECT 'warenkorb' AS what, COUNT(*) FROM tabelleA WHERE userID = $aktuelleUserID
    2. UNION
    3. SELECT 'gekauft' AS what, COUNT(*) FROM tabelleB WHERE userID = $aktuelleUserID



    Quellcode

    1. SELECT * FROM (
    2. SELECT COUNT(*) AS warenkorb FROM tabelleA WHERE userID = $aktuelleUserID
    3. ) x, (
    4. SELECT COUNT(*) AS gekauft FROM tabelleB WHERE userID = $aktuelleUserID
    5. ) y