Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2006 Teil von März

SELFHTML Forumsarchiv
ich will immer ein Ergebnis

Informationsseite
  1. Seite (DATENBANK) ich will immer ein Ergebnis von Mario, 31. 03. 2006, 11:50
nach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Mario, 31. 03. 2006, 11:50

Hallo,

Ich möchte bei folgendem SQL auf jeden Fall ein Ergebnis zurück haben:

SELECT count(*), MAX(t.date)
FROM autor a, text t
WHERE a.ID = t.autor_ID and a.ID='1'
GROUP BY a.ID

Sinn des SQLs ist zu Zeigen, wieviel der Autor "1" geschrieben hat und wann der letzte Eintrag erfolgt ist.
Es kommt ein Ergebnis...
7, 2006-03-01 12:12:00
... sobald Autor "1" etwas geschrieben hat.
Ich will aber auch folgendes SQL-Ergebnis...
0, 0000-00-00 00:00:00
... wenn der Autor nichts geschrieben hat. Das kommt aber logischerweise nicht.

Ich will das Nichtvorhandensein nicht mit PHP prüfen (mysql_num_rows etc.)

Was muß ich also noch ergänzen?

Vielen Dank,

Mario

PS: Hier die Basics: MySQL 4.1, PHP4

nach obennach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Frank (no reg), 31. 03. 2006, 12:43

Hi,

SELECT COUNT(*) ...


sollte immer ein Ergebnis (eine Zeile), ein Skalar (also eine Zeile mit mind. bzw. genau einer Spalte) zurückliefern. Mindestens 0 (nein, nicht NULL).

Und was ist jetzt eigentlich dein Problem? Wo willst du was ergänzen?

Ciao, Frank

nach obennach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Rouven, 31. 03. 2006, 12:47

Hi,

das ist richtig, aber gilt AFAIK nur wenn keine Gruppierung vorliegt. Im vorliegenden Fall ist aber ein WHERE-Kriterium so angelegt, dass überhaupt keine Datensätze zurückkommen, daher auch keine Gruppe entsteht und das DBMS es nicht für nötig hält einen Satz rauszugeben.

BTW: Was stünde deiner Meinung nach dann in MAX(t.date)? Da kann ich mir in so einem Fall gar keinen Reim draus machen - und ich bin gerade zu faul meine DB2 hochzufahren...

MfG
Rouven

--
-------------------
ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(

nach obennach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Frank (no reg), 31. 03. 2006, 15:46

Hi,

ich sehe, was du meinst. Hatte die FROM table, table als OUTER Join gedeutet ... isses aber wohl nicht, zmd nicht unter T-SQL :)

Das SQL vom OP impliziert einen Inner Join, der für den Autor 1 schon gar keinen Datensatz bringt und dann noch gegen Werte aus dem "keinen" Datensatz gruppieren soll.

Formulierst du die Abfrage hingegen mit einem ordentlichen Join, welcher für die Anforderung des OP auch angemessen ist, nämlich LEFT OUTER JOIN, dann bekommt man das gewünschte ein Ergebnis solange die WHERE Klausel auch Daten zulässt die in der linkesten Tabelle sind.

Also quasi so:
SELECT count(*), MAX(t.date)
FROM autor a
LEFT OUTER JOIN text t ON a.ID = t.autor_ID
WHERE and a.ID='1'
GROUP BY a.ID  -- ob das sinn macht wenn man sowieso nur einen Datensatz erwartet?


Gibt es in der rechteren Tabelle dann kein Match, bleibt MAX(t.date) bei NULL. Ist ja auch verständlich, MAX von 100x NULL ist immernoch NULL. Dies beantwortet sicherlich deine Frage.

Ciao, Grüsse vom Zürichsee
Frank

nach obennach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Frank (no reg), 31. 03. 2006, 15:55

hi nochmal, zu schnell gepostet :)

... mit dem LEFT OUTER JOIN kommt logischerweise dann immer bei COUNT(*) mind. 1 heraus, auch wenn es keinen Eintrag in der rechten Tabelle gibt. In diesem Fall sollte man natürlich querchecken, dass MAX(t.DATE) ungleich NULL ist

Ciao, Frank

nach obennach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Bossie, 31. 03. 2006, 12:57

Hi,

»» SELECT count(*), MAX(t.date)
»» FROM autor a, text t
»» WHERE a.ID = t.autor_ID and a.ID='1'
»» GROUP BY a.ID

formulier die Abfrage mal mit einem geeigneten JOIN um. Eventuell koennte auch HAVING zum Einsatz kommen. Und wegen der zweiten WHERE-Bedingung auch mal a.ID ins SELECT packen...

Was soll eigentlich GROUP BY a.ID, wenn a.ID='1'?

Bossie

nach obennach unten

ich will immer ein Ergebnis

Die folgende Nachricht zum Thema stammt von: Mario, 31. 03. 2006, 13:23

Hallo Freunde,

vielen Dank für die Tipps.

Ich habe mich natürlich gewundert, das aufgrund Count(*) kein Ergebnis kam. Ich dachte, da bei MAX(date) kein Ergebnis kommt, wird Count mit aufgehoben.
Der gedankliche Fehler lag beim group. Das war zuviel. Jetzt läuft es wie gewünscht.

Gruss, Mario

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2006 Teil von März

© 1998-2006 Seite Impressum, Software: Classic Forum