Einzelnen Beitrag anzeigen

Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Bereits vorhandene Werte nicht in Query aufnehmen

  Alt 1. Mär 2007, 05:57
Datenbank: MySQL • Version: 5.0 • Zugriff über: PHP
Hallo!

Welche Rows werden eigentlich durch ein GROUP BY ausgeblendet? Alle bis auf das Letze oder alle bis auf das Erste oder gibt es da keine Regel?

Mein Problem:
Ich habe eine Tabelle in der die persönlichen Einstellungen der Benutzer gespeichert werden:
Code:
+---------------+--------------+
| Field        | Type        |
+---------------+--------------+
| user_id      | int(10)     |
| setting_name | varchar(25) |
| setting_value | varchar(255) |
+---------------+--------------+
Die Standardeinstellungen, die greifen, wenn der User nichts spezielles eingestellt hat werden über user_id = -1 identifiziert.
Ich will eine Abfrage schreiben in der alle Eigenschaften vorkommen, alle von -1 die dann durch die Benutzereigenschaften überschrieben werden.

Mein erster Versuch:
SQL-Code:
SELECT setting_name, setting_value
FROM settings
WHERE user_id = -1
   OR user_id = <user_id>
ORDER BY user_id ASC
Jetzt kommt jede Eigenschaft mindestens einmal vor als Default, sollte der User eine eigene Einstellung haben, so wird diese danach ebenfalls gelistet. Mit folgendem Code führe ich dann die Einstellungen zusammen. Zuerst werden alle Default-Einstellungen in den Array gespeichert und danach ev. mit den Benutzereinstellungen überschrieben.
Code:
$settings = array();
while ($row = $db->fetchrow($result))
{
   $settings[$row['setting_name']] = $row['setting_value'];
}
Das ist jedoch nicht so wie ich will, das ist unnötige Arbeit.

Frage:
Wie kann ich das gleich per SQL erreichen, dass zwar jede Default-Eigenschaft vorkommt, jedoch ev. von Benutzereinstellungen überschrieben wird, wenn vorhanden.
Hätte schon an so etwas gedacht, aber keine Ahnung ob das funktioniert:
SQL-Code:
SELECT setting_name, setting_value
FROM settings
WHERE user_id = -1
   OR user_id = <user_id>
ORDER BY user_id ASC
GROUP BY setting_name
Deswegen auch die Frage zu GROUP BY.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat