Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[SQL allgemein] Joins - Anzeigen von 0-Feldern [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[SQL allgemein] Joins - Anzeigen von 0-Feldern


 
miguel_rkc
29-09-2004, 15:23 
 
Hallo,
ich habe folg. Tabellen:

"meldung":
meldung_id | prioritaet | ...

"user_b_meldung":
meldung_id | datum_akt | aktion | ...

Ich möchte die Anzahl der Meldungen an einem bestimmten Datum - geordnet nach der Prioritaet - haben, was mit dieser Abfrage auch funktioniert:

SELECT count(user_b_meldung.meldung_id ),
meldung.prioritaet
FROM meldung inner join user_b_meldung on meldung.meldung_id = user_b_meldung.meldung_id
WHERE user_b_meldung.aktion LIKE '%auf "läuft"%' and user_b_meldung.datum_akt LIKE '2004-09-29%'
GROUP BY meldung.prioritaet


ABER: Es gibt genau 4 Prioritäten (niedrig, mittel, hoch, fatal) und wenn z.B. keine Meldung die Priorität "mittel" hat, dann wird sie aus der Ergebnismenge weggelassen, was ich aber nicht möchte. Stattdessen sollte dort eine 0 auftauchen.

Ergo: aus ->

count(user_b_meldung) | prioritaet
2 | niedrig
4 | hoch
2 | fatal

soll ->

count(user_b_meldung) | prioritaet
2 | niedrig
0 | mittel
4 | hoch
2 | fatal
werden. Hat irgendwer eine Idee?

 
asp2php
29-09-2004, 15:27 
 
LEFT JOIN und IF sind deine Freunde

 
mrhappiness
29-09-2004, 15:27 
 
http://www.php-resource.de/forum/showthread.php?s=&threadid=28292 lesen und danach einen anderen JOIN nehmen, INNER JOIN ist da blöd

 
miguel_rkc
29-09-2004, 15:36 
 
Jo, dass ich stattdessen lieber einen left-join hätte nehmen sollten, war mir auch noch eingefallen, aber wie bringe ich das mit der priorität zusammen?

 
mrhappiness
29-09-2004, 15:40 
 
was kommt raus, wenn du LEFT JOIN nimmst?

was kommt raus, wenn du LEFT JOIN nimmst und die WHERE klausel weg lässt?

was kommt raus, wenn du aus WHERE AND machst?

 
miguel_rkc
29-09-2004, 15:49 
 
1. das selbe

2. viele Meldungen, da im System an sich alle Prioritäten garantiert mal vorkommen, aber auf einen bestimmten Tag bezogen nicht zwangsläufig

3. genau das, was ich wollte ;)

thx

 
miguel_rkc
30-09-2004, 09:07 
 
Eine Sache noch: Es ist durchaus wahrscheinlich, dass eine Meldung mehrmals gezählt wird (da der Status mehrmals hin und her gewechselt werden kann). Wie kann ich dafür sorgen, dass eine meldungs_id auch nur einmal gezählt wird?

 
mrhappiness
30-09-2004, 09:09 
 
http://dev.mysql.com/doc/mysql/en/GROUP-BY-Functions.html :)

 
miguel_rkc
30-09-2004, 09:30 
 
count(distinct ....) scheint zu gehen, meintest du das?

 
mrhappiness
30-09-2004, 09:33 
 
Original geschrieben von miguel_rkc
count(distinct ....) scheint zu gehen, meintest du das? nein, ich meinteINCREMENT_COUNTER_FOR_DIFFERENT_VALUES_ONLY_BECAUSE_THIS_HIDDEN_FUNCTION_ROCKS

 
miguel_rkc
30-09-2004, 09:39 
 
stimmt, distinct macht müll

aber wo bitte siehst du mit

"INCREMENT_COUNTER_FOR_DIFFERENT_VALUES_ONLY_BECAUSE_THIS_HIDDEN_FUNCTION_ROCKS"



:confused:

 
mrhappiness
30-09-2004, 09:47 
 
Original geschrieben von miguel_rkc
distinct macht müllsoviel müll, dass du ihn uns nicht zumuten willst?

 
miguel_rkc
30-09-2004, 10:15 
 
damn, klappt doch, hab nur vergessen das abfragefenster zu aktualisieren ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:31 Uhr.