You are not logged in.

  • Login

1

Monday, July 6th 2009, 11:18pm

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:

PHP Quellcode

1
2
3
4
5
SELECT portal.*, user.*
FROM portal_items portal
LEFT JOIN user_items user
    ON(portal.itemID = user.itemID)
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 :)

2

Tuesday, July 7th 2009, 9:15am

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:

SQL Code

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



SQL Code

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

Similar threads

Social bookmarks