AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Bereits vorhandene Werte nicht in Query aufnehmen
Thema durchsuchen
Ansicht
Themen-Optionen

Bereits vorhandene Werte nicht in Query aufnehmen

Ein Thema von faux · begonnen am 1. Mär 2007 · letzter Beitrag vom 1. Mär 2007
Antwort Antwort
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Bereits vorhandene Werte nicht in Query aufnehmen

  Alt 1. Mär 2007, 06:37
Hast du schon distinct ausprobiert?
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Bereits vorhandene Werte nicht in Query aufnehmen

  Alt 1. Mär 2007, 08:53
Hallo,

eigentlich sollte es funktionieren, wenn man die Anforderung direkt in SQL übersetzt:

SQL-Code:
/* 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)
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz