count abfrage funktioniert nicht.

largo666

Mitglied
Hallo,

ich möchte gerne die Anzahl der neuen Nachrichten ausgeben.
Im Array wird aber immer nur eine Nachricht ausgegeben.
ich Frage ab ob die Nachricht schon gelöscht und ob die Nachricht gelesen wurde und speichere dann die id´s der nachrichten in einem array.

hier der Code

PHP:
$sql = "SELECT `id` FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'";
    $result=mysql_query($sql);
    $show = mysql_fetch_array($result);
	
	$pm['id'] = $show['id'];
	echo count($pm['id']);
	echo $pm['id'];

Ausgabe von count ist in diesem Falle "1" obwohl 2 Nachrichten id´s in der DB sind.
Die Ausgabe der id´s an sich zeigt nur die erste id die zweite nicht mehr.

Wo liegt der Fehler?
 
Also ich gehe mal davon aus das die Abfrage das richtige Ergebnis liefert, dann mach es doch einfach so:

PHP:
$sql = "SELECT `id` FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'"; 
$result=mysql_query($sql);
echo mysqL_num_rows($result);

mysql_fetch_array liefert außerdem ja nur den einen aktuellen Datensatz zurück, somit stimmt die Zahl 1.
Oder bringe ich da gerade was durcheinander?
 
Zuletzt bearbeitet:
PHP:
// Query
$query = "SELECT COUNT (id) FROM messages WHERE`to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'";
// Counter
$counter = 0;
// Zähle einträge
list($count) = mysql_fetch_array($query);
// Gebe wert aus
print $counter;
 
mysql_fetch_array() liest immer den nächsten Eintrag aus dem ResultSet aus. Da die Funktion nur einmal aufgerufen wird, hast du auch nur einen Wert. Die Lösung ist dann eine Schleife ;)

PHP:
while ($row = mysql_fetch_array($result)) {
  // tu was
}
 
@ tombe

ne haste falsch verstanden. Ich brauch ja die Gesammtanzahl der Nachrichten

@ philishake

Bei deinem Code bekomm ich nen sql error (not supplied argument)
bekomm ich aber immer wenn ich die count funktion direkt dort einbaue. Hatte ich auch schon versucht.

@ Tim Burek

das mit der while schleife hatte ich auch schon getestet... sa dann so aus

PHP:
$sql = "SELECT `id` FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'";
    $result=mysql_query($sql);
    while($show = mysql_fetch_array($result));
	{
++$count[$show['id']];  }
//sort($count); 
foreach($count AS $key=>$val) {
$count=$val; }

echo "$count";

liefert aber auch nur wieder ne 1 obwohl ja 2 datensätze vorhanden sind.
 
Zuletzt bearbeitet:
...ich möchte gerne die Anzahl der neuen Nachrichten ausgeben...

Die Anzahl der Nachrichten der neuen Nachrichten ist für mich was anderes, aber egal.

Ich brauch ja die Gesammtanzahl der Nachrichten

Und da schreibst du es ja wieder.

So wie Tim es geschrieben hat sollte es dann aber auf jeden Fall gehen:

PHP:
 echo "Es sind " .mysql_num_rows($result) ." Nachrichten vorhanden.<br>";
While ($row = mysql_fetch_array($result) {
  echo "Nachrichten-ID " .$row["id"] ."<br>";
}

Damit bekommst du jetzt deine IDs angezeigt. Was du genau machen willst, kann ich leider aus den Code nicht herauslesen.
Abgesehen davon, der Code dürfte so wie er oben steht eigentlich gar nicht fehlerfrei arbeiten.
 
Zuletzt bearbeitet:
@ philishake

Bei deinem Code bekomm ich nen sql error (not supplied argument)
bekomm ich aber immer wenn ich die count funktion direkt dort einbaue. Hatte ich auch schon versucht.

Das hat mit der count funktion nix zu tun. philishake hat das mysql_query vergessen und $count != $counter.

das mit der while schleife hatte ich auch schon getestet... sa dann so aus
Das mit der while-Schleife ist aber richtig. Hast du dir denn mal die Doku und die Beispiele von mysql_fetch_array angesehen?
http://de.php.net/manual/de/function.mysql-fetch-array.php

ch möchte gerne die Anzahl der neuen Nachrichten ausgeben
Wenn es dir nur um die Anzahl geht kannst du das auch ganz einfach per Count in sql lösen.
 
Also nochmal zum verständnis:

Ich möchte alle id´s Zählen die der SELECT abfrage entsprechen. Also alle wo " to_delete=0 " und " to_viewed=0 " sind.

@ tombe

bei deiner variante gibt der mir zwar die richtige anzahl an id´s aus allerdings nicht als eine zahl sondern hintereinander.

Sprich bei 4 Id´s gibt er " 1111 " aus. Sollte aber " 4 " ausgeben und nicht alles hintereinander.

PHP:
 $sql = "SELECT `id` FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'";
    $result=mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
  echo count($row['id']);

@ rd4eva

Die Doku hatte ich mir angeschaut und auch ausprobiert mit der Schleife. hab da aber wohl irgend nen Fehler drinn gehabt.
 
Möglichkeit 1
PHP:
$sql = "SELECT Count(*) FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'"
$result=mysql_query($sql);
echo mysql_result($result,0,0)

Möglichkeit 2
PHP:
$sql = "SELECT `id` FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'";
    $result=mysql_query($sql);
	$count = 0;
	while ($row = mysql_fetch_array($result)) {
		$count++;
	}
	echo $count;

Möglichkeit 3:
PHP:
$sql = "SELECT `id` FROM messages WHERE `to` = '".$_SESSION['id']."' && `to_viewed` = '0' && `to_deleted` = '0'";
    $result=mysql_query($sql);
	$num_rows = mysql_num_rows($result); 
	echo $num_rows;
 
Zurück