Verknüpfung von 2 Tabellen: gesetzte Werte ausschließen

Begonnen von k00ni, 18. Juli 2007, 20:01:15

Vorheriges Thema - Nächstes Thema

k00ni

Hallo,
ich habe 2 Tabellen, die ich abfragen möchte. Es geht um die Verwaltung der Einstellungen der User. Ich mache dies über einen Left Join und möchte alles auf einmal haben :ugly: Einerseits soll er mir alle Daten über die Usereinstellungen besorgen und dann noch, ob der angegebene User da schon was reingeschrieben hat.
Folgendermaßen sieht mein SQL-Statement aus:
 

SELECT sys_friends_user_profile_usersettings.id, name, label, value 
FROM sys_friends_user_profile_usersettings
LEFT JOIN sys_friends_user_profile_user_usersettings
ON sys_friends_user_profile_usersettings.id = sys_friends_user_profile_user_usersettings.settingid
WHERE changeable_by_user = \'true\' AND (userid=\'2\' OR userid IS NULL)

 
 
Das Problem ist eigentlich nur, dass er mir nur Datensätze anzeigt, die bereits von dem User angelegt wurden. Ich will aber alle haben, wo changeable_by_user gleich true ist und wo entweder die userid von 2 gegeben ist oder gar keine. Mit gar keine bezwecke ich, dass ich dann im Feld value nichts drin stehen habe und das System eine Defaulteinstellung setzt.
Ich habe noch probiert userid = \'\' zu setzen, was genauso nichts brachte. Es hängt an diesem letzten Abfrageteil :/ Würde das laufen, spare ich eine Abfrage ein. /uploads/emoticons/icon_e_smile.gif.4a0acefcb917340d2c82e5239c009e6e.gif\" alt=\":)\" />
 
Grüße

Powie

zum Verständniss: In welcher Tabelle befindet sich changeable_by_user ?
Bau den SQL mal bitte mit Alias Namen auf, damit man das besser erkennen kann.

k00ni

Morgen,
changeable_by_user befindet sich in der sys_friends_user_profile_usersettings.
 

SELECT up_us.id, name, label, value  
FROM sys_friends_user_profile_usersettings  up_us
LEFT JOIN sys_friends_user_profile_user_usersettings up_uus
ON up_us.id = up_uus.settingid  
WHERE up_us.changeable_by_user = \'true\' AND (userid=\'2\' OR userid IS NULL)

 
 
Wie gesagt, dass SQL-Statement ist an sich sauber und läuft, nur weiß ich nicht wie man gestetzte Werte ausschließt.
Das Problem ist eigentlich nur, dass er mir nur Datensätze anzeigt, die bereits von dem User angelegt wurden. Ich will aber alle haben, wo changeable_by_user gleich true ist und wo entweder die userid von 2 gegeben ist oder gar keine.[/quote]

Powie

K00ni K00ni.... ein Tabellenname mit 42 Zeichen,...... das kann man ja kaum lesen  :ugly:
ergänze die Aliase mal hier noch:
WHERE up_us.changeable_by_user = \'true\' AND (userid=\'2\' OR userid IS NULL)

Powie


Powie

Left Outer Join  /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />

k00ni

Hallo,
also wir haben das jetzt schniddig gelöst. /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" /> Es lag daran, dass da statt dem LEFT JOIN, ein LEFT OUTER JOIN hin muss, sonst zeigt er nur soviele Datensätze an, wie in der zweiten Tabelle drin sind, egal wieviel die erste hat.
Nun zeigt er immer alle Werte der ersten Tabelle an, ggf auch die der zweiten oder setzt die values halt auf \"leer\".
Boar, was für ne schwere Geburt. Man sollte auch immer mal schauen, ob man die richtige Datei hochläd :ugly:
 
Grüße
ps.: Danke Powie  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

all your base are belong to us