![]() |
Datenbank: MySQL • Version: 5.0 • Zugriff über: PHP
Bereits vorhandene Werte nicht in Query aufnehmen
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:
Die Standardeinstellungen, die greifen, wenn der User nichts spezielles eingestellt hat werden über user_id = -1 identifiziert.
+---------------+--------------+
| Field | Type | +---------------+--------------+ | user_id | int(10) | | setting_name | varchar(25) | | setting_value | varchar(255) | +---------------+--------------+ 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:
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.
SELECT setting_name, setting_value
FROM settings WHERE user_id = -1 OR user_id = <user_id> ORDER BY user_id ASC
Code:
Das ist jedoch nicht so wie ich will, das ist unnötige Arbeit.
$settings = array();
while ($row = $db->fetchrow($result)) { $settings[$row['setting_name']] = $row['setting_value']; } 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:
Deswegen auch die Frage zu GROUP BY.
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 Grüße Faux |
Re: Bereits vorhandene Werte nicht in Query aufnehmen
Hast du schon distinct ausprobiert?
|
Re: Bereits vorhandene Werte nicht in Query aufnehmen
Hallo,
eigentlich sollte es funktionieren, wenn man die Anforderung direkt in SQL übersetzt:
SQL-Code:
Getippt und nicht getestet.
/* alle Einstellungen von User 1 */
SELECT user_id, setting_name, setting_value FROM settings WHERE user_id = 1 /* und dazu */ UNION /* nur die Einstellungen vom default user, */ /* die noch nicht bekannt sind */ SELECT user_id, setting_name, setting_value FROM settings WHERE user_id = -1 and not setting_name in (SELECT setting_name FROM settings WHERE user_id = 1) Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz