# Anzahl Einträge einer Zeile aus MySQL auslesen



## Franky76 (4. März 2005)

Ich hab folgendes Problem. Ich will in einer Tabelle zählen wieviele Einträge bereits in einer bestimmten Zeile stehen. Die Zeile ist gekennzeichnet durch eine ID.

     Meine Idee:


```
$result = mysql_query ("select * from $tabelle where id='$id'");
     
     $anzahl = mysql_num_rows($result);
     echo "Anzahl Daten in Tabelle: ".$anzahl." <br>";
```
 
 Dieses Skript gibt mir aber immer eine 1 aus. Schätze es guckt nur in die eine Zelle, wo id='$id" und darin existiert ja auch richtigerweise nur ein Eintrag.

     Wie kriege ich aber raus, wieviel Einträge in der ganzen Zeile sind und nciht nur in der einen Zelle ?

 Ich meine übrigens wirklich die Anzahl der Einträge in den Spalten und nicht die Spaltenanzahl! Diese ist festgelegt. Die kenne ich. Ich will wissen in wie vielen dieser z.B. 10 Spalten schon Einträge sind. Nur in 3en ? Oder doch in Vieren ?

     Ich bin php Anfänger. Bitte helft mir!


----------



## Dennis Wronka (4. März 2005)

Probier mal *mysql_num_fields* anstatt mysql_num_rows.


----------



## Franky76 (4. März 2005)

Danke für den Tipp!

     Das klappt nun mit  
	
	
	



```
$result = mysql_query ("select * from $tabelle where id='$id'");
  	 
  	 $anzahl = mysql_num_fields($result);
 	 echo "Anzahl Daten in Tabelle: ".$anzahl." <br>";
```
 zumindest soweit, dass mir dieser Befehl die Anzahl der gesamten Spalten wieder gibt, die für die Zeile "id" existieren.

 Der Befehl zählt nun aber leider auch diejenigen Felder (Zellen) mit, in denen noch kein Eintrag steht, bzw in denen der Eintrag 0 (null) steht. Ich brauche aber die Anzahl der Zellen in denen irgendwann schon einmal Werte eingetragen wurden (also in denen nicht "gar nichts" oder 0 (Null) steht.

      Muss ich dazu vielleicht die Attribute der Spalten in der MySQL Datenbank ändern ? 

 Im Moment sind die Spalten in denen die Werte eingetragen werden folgendermaßen definiert: Typ (varchar11); kollation (latin1general_ci) Null (nein) Standard (0).

 Doch auch wenn als Standard in den Zellen, wo noch kein Wert ist, keine 0 (Null) eingetragen wird - also wenn in dem Feld unter phpMyAdmin dann gar nichts zu sehen ist (es also leer ist) wird es mitgezählt.

      Wie kann ich das denn nur lösen ?


 Da die Daten (sofern welche eingetragen wurden) immer nur von links nach rechts eingetragen werden, sich die Zellen also nur in der Reihenfolge spalte1, spalte2, ... spalte10 füllen können würde mir auch ein Befehl helfen, der einfach die Nummer der Spalte ermittelt, in der der letzte Eintrag vorkommt.

     Wer weiss wie das funktioniert? Bin dankbar für jede Hilfe.


----------



## Franky76 (4. März 2005)

Ich vermute mal die Lösung meines Problems liegt in der "WHERE" Bedingung.

  Ich denke man muss den Befehl in etwa folgendermaßen erweitern...


```
$result = mysql_query ("SELECT * from $tabelle WHERE id='$id'AND XXX !==0");
```
 
  Dabei müsste man dann für XXX sowas einfügen wie "Inhalt der Zeile". Dann müsste die Abfrage mit mysql_num_fields doch nur noch die Anzahl der Zellen ausgeben, in denen eben NICHT Null steht, sondern ein Wert ?

 Nur was muss ich dann für das XXX einsetzten ? Ich kann nirgends eine Erklärung dafür finden und bin langsam am verweifeln. Geht das überhaupt ?


----------



## Luzie (4. März 2005)

Du könntest z.B. den count() der Datensätze auslesen, wo die Länge eines bestimmten Feldes größer 0 und der id Deines Wertes entspricht und das ganze über mysql_fetch_array()


```
$sql = "SELECT count( feld ) AS anzahl FROM Tabelle WHERE length( feld ) > 0 AND id =$id";
  $rs = mysql_query($sql);
  $row = mysql_fetch_array($rs);
  echo $row[0];
```


----------



## Franky76 (4. März 2005)

Das verstehe ich leider nicht. Was müßte ich denn dann für (feld) einsetzten ? Ich will ja die Anzahl der Einträge einer Zeile wissen (und nicht die eines bestimmten feldes oder die einer bestimmten Spalte).

 Verstehe ich es nur nicht ? Was müßte ich für (feld) einsetzen, wenn nicht den namen einer Spalten ? Und die Zeile ist ja schon mit WHERE id=$id definiert.

 Was ich bei Anzahl einsetzten müßte weiß ich leider auch nciht und im php Handbuch finde ich bei (count) leider auch keine Erklärung für die weitere Syntax.


----------



## Luzie (5. März 2005)

Hey, 

wer lesen kann ist echt im Vorteil.    
Sorry, habe ich echt übersehen, dass Du nur die Anzahl der beschriebenen Zellen in einer Zeile aufgelistet haben wolltest. Von daher kannst Du den Count() da vergessen. 

Lösgungsmöglichkeit wäre, einfach in einer Schleife abzufragen, ob die Zelle beschrieben ist und einen Zähler mitlaufen lassen


```
$sql = "SELECT * from $table where id = $id";
  $result = mysql_query($sql);
  $row = mysql_fetch_assoc($result);
  $i=0;
  foreach($row as $val) {
  if($val !="") {
  	 $i++;
  }
  }
  echo $i;
```

Vielleicht gibts auch noch eine andere Funktion. Aber dies ist, was mir auf die Schnell einfällt.


----------

