PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gefüllte Felder ermitteln


chris17
08.12.2003, 10:50:12
Hallo zusammen,

eine Tabelle mit folgendem Aufbau:

Feld Wert
------------------
id 1
start 2004-12-12
tag1 bla bla
tag2 bla bla
tag3 bla bla
tag4 bla bla
tag5
tag6
tag7

Als Ergebnis hätte ich gerne: "4" -> Die Anzahl der Tage in denen ein Wert eingetragen ist.

An der Struktur der Tabelle kann ich nix ändern.

Wie muss der Query ausehen, der mir direkt die "4" zurückgibt?

Vielen Dank schonmal

Christian

overclocker
08.12.2003, 15:31:51
Das kannst du mit folgendem Query rausfinden:

SELECT COUNT(*) FROM tabelle WHERE feld LIKE 'tag%' AND wert!='';

chris17
08.12.2003, 16:20:20
Sorry overclocker,

meine "Tabellendarstellung" ist missverständlich.

"Feld": tag1, tag2 usw. sind die Namen der Tabellenspalten (Quasi die Tabellenstruktur).
Und "Wert" sind eben die Inhalte der Tabellenfelder.

Die Tabelle zeigt also einen Datensatz mit der id=1.
Ich glaub nicht, dass ich da mit COUNT weiterkomme.

Dankeschön für Deine Antwort.

overclocker
08.12.2003, 19:35:02
aha… ich dachte Du wolltest zählen an welchen Tagen etwas eingetragen wurde.

Es ist mir immernoch nicht so klar.
Kannst Du vielleicht ein Beispiel geben, was konkret rauskommen soll.

Willst Du sowas haben wie:
3 = bla bla
4 = bla bla
5 =
6 =

na dann…

c4
08.12.2003, 19:41:55
Er will wissen, dass in den 7 Feldern 4 einen Wert haben.
Ich glaube nicht, dass das mit einer Abfrage geht. Wie man es mit 7 Abfragen schafft wüsste ich.... ;)

chris17
09.12.2003, 11:05:44
overclocker:
aha… ich dachte Du wolltest zählen an welchen Tagen etwas eingetragen wurde.

c4:
Er will wissen, dass in den 7 Feldern 4 einen Wert haben.
Genau, als Ergebnis hätte ich gerne: 4 -> Die Anzahl der Tage in denen ein Wert eingetragen ist.(Innerhalb eines Datensatzes)

So in etwa mach ich es bisher:

<?php
$sql = "SELECT tag1,tag2,tag3,tag4,tag5,tag6,tag7 ";
$sql.= " FROM tbl_tabelle WHERE id=1";

$res = mysql_query($sql);
$row = mysql_fetch_row($res);

$anz = 0;
for($i = 0; $i < count($row); $i++)
{
if(!empty($row[$i]))
{
$anz++;
}
}
echo "An ".$anz." Tagen wurde etwas eingetragen.";// $anz = 4
?>

Wäre halt klasse, wenn man das mit SQL erledigen könnte.

Nev
09.12.2003, 12:26:21
Hi @ll

Ich habe eine Lösung gefunden, aber schön ist die ned

SELECT
(
IF (tag1 != "", 1, 0) +
IF (tag2 != "", 1, 0) +
IF (tag3 != "", 1, 0) +
IF (tag4 != "", 1, 0) +
IF (tag5 != "", 1, 0) +
IF (tag6 != "", 1, 0) +
IF (tag7 != "", 1, 0)
) As filled
FROM tbl_tabelle WHERE id=1

Ich glaube das SQL braucht man ned erklären.

chris17
09.12.2003, 14:05:08
Danke Nev!!! *hüpf*

Nev
09.12.2003, 14:21:30
NP

Wenn dir die Lösung gefällt, ist gut.

Aber hübsch is ned

c4
09.12.2003, 18:22:49
Nev, erkläre mal bitte. Oder einen Link dafür.

chris17
09.12.2003, 18:28:28
Hi c4,

-> http://www.mysql.de/doc/de/Control_flow_functions.html

c4
09.12.2003, 18:33:18
Ist ja genial! Danke.

Nev
09.12.2003, 18:42:49
Hi @ll

Das ganze ist aber Sprach-Spezifisch.

d.h. wenn man versucht, das Script mit anderen Datenbanken zu verwenden, sollte man das ganze unterlassen.