SELECT und JOIN Problem

MisteryX

Grünschnabel

Hallo,

ich hab zwar bisher jedes Problem das ich hatte über die Suche lösen können aber jetzt is endgültig aus.

Ich habe so ne Art Partyplaner in der sich die User meiner Seite eintragen können. Dazu kommt noch das die einzelnen User in Gruppen Organisiert sind. Ein User sieht eine Party wenn er entweder in einer Gruppe ist die der Party zugeordnet ist oder die Party im Feld 'Public' eine 1 hat.

Bisher hab ich das einfach immer so gelöst das ich zwei Tabellen ausgegeben hab. Einmal die Partys mit 'Public' = 1 und einmal mit den Partys die sich über die Gruppen ergeben. Aber jetzt brauch ich beides in einer Tabelle.

Hier mal die Tabellen:
partys: Id, Titel, ...
show_to_group: Eintrag (Id von partys), Group_id (Id der Gruppe)
user_to_groups: User_id (Id von User), Group_id (Id der Gruppe)

Hier mal meine bisherigen Abfragen: Zuerst die 'Public'
PHP:
SELECT Id, Beginn, Titel, DATE_FORMAT(partys.Beginn, '%d.%m.%Y %H:%i') AS Datum, DATE_FORMAT(partys.Beginn, '%W') AS Tag FROM partys 
WHERE Beginn >= CURDATE() AND Beginn <= ADDDATE(CURDATE(), INTERVAL 31 DAY) AND Public = 1 
ORDER BY Beginn LIMIT 5

Und jetzt die mit der Gruppenabfrage:
PHP:
SELECT Id, Beginn, Titel, DATE_FORMAT(partys.Beginn, '%d.%m.%Y %H:%i') AS Datum, DATE_FORMAT(partys.Beginn, '%W') AS Tag FROM partys 
INNER JOIN show_to_group ON CONCAT('prt',partys.Id) = show_to_group.Eintrag
INNER JOIN user_to_groups ON user_to_groups.Group_id = show_to_group.Group_id 
WHERE user_to_groups.User_id = '$user_id' AND Beginn >= CURDATE() AND Beginn <= ADDDATE(CURDATE(), INTERVAL 31 DAY) 
GROUP BY Id ORDER BY Beginn LIMIT 5
Wie bring ich jetzt das ganze in eine Abfrage mit einer Tabelle als Ergebnis? Subselect geht leider nicht weil meine mysql Version aufm Server zu alt ist.

Wär super wenn ihr da ne Löung wissen würdet. Vielen Dank schon mal.
 
Zuletzt bearbeitet von einem Moderator:
Wenn beide Abfragen die gleiche Ergebnisstruktur besitzen konntest du sie über eine UNION verbinden.
Oder So Ähnlich:

SQL:
SELECT Id, Beginn, Titel, DATE_FORMAT(partys.Beginn, '%d.%m.%Y %H:%i') AS Datum, DATE_FORMAT(partys.Beginn, '%W') AS Tag 
FROM partys  
LEFT JOIN show_to_group ON CONCAT('prt',partys.Id) = show_to_group.Eintrag 
LEFT JOIN user_to_groups ON user_to_groups.Group_id = show_to_group.Group_id  
WHERE Beginn >= CURDATE() AND Beginn <= ADDDATE(CURDATE(), INTERVAL 31 DAY)  AND (user_to_groups.User_id = '$user_id' Or Public = 1)
GROUP BY Id
ORDER BY Beginn LIMIT 5
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück