count mit Bedingung

ArFiBa

Erfahrenes Mitglied
Hallo,
ich denke die Überschrift sagt schon alles. Ich möchte Datensätze aus einer MySql DB mit bestimmter Inhalt zählen lassen.
Mit <?php echo $totalRows_mail ?> ($totalRows_mail = mysql_num_rows($mail)) zähle ich alle Datensätze und möchte jetzt auch die zählen, bei denen in der Spalte gelesen eine 1 stehet.

Ich schätze das ist ganz einfach ich komm nur nicht drauf.
 
Du mußt einfach deine Datenabfrage entsprechend modifizieren, daß nur die Datensätze gewertet werden, die das gewünschte Attribut haben. Das Ganze hat allerdings nichts mit PHP zu tun, sondern gehört eigentlich ins Datenbankforum.
 
PHP:
 $CountThis = 0;
 while ($Row = Mysql_Fetch_Assoc ($Query)) if ($Row['gelesen'] == 1) $CountThis = $CountThis++;
 
_voodoo hat gesagt.:
PHP:
 $CountThis = 0;
 while ($Row = Mysql_Fetch_Assoc ($Query)) if ($Row['gelesen'] == 1) $CountThis = $CountThis++;
Damit wird er nicht glücklich werden, weil $CountThis auch nach der Schleife noch 0 ist.

ArFiBa hat gesagt.:
Das geht nur leider nicht da in der selben Datei auch die Anzahl aller Datensätze gezählt werden.
Das ist kein Hindernis. Außerdem sollte man die Gesamtanzahl aller Datensätze nie mit Hilfe von mysql_num_rows() ermitteln, sondern mit einem SQL-Query àla "SELECT COUNT(*) FROM `tabelle`".

In deinem Fall könnte ein entsprechender Codeteil in etwa so aussehen:
PHP:
$query = 'SELECT COUNT(*) AS `anzahl`, `gelesen`
          FROM `tabelle`
          GROUP BY `gelesen`';

$result = mysql_query($query);

$counts = array();
while ($row = mysql_fetch_assoc($result)) {
	$counts[$row['gelesen']] = $row['anzahl'];
}

$total = $counts[0] + $counts[1];
$gelesene = $counts[1];
 
Habs jetzt so eingabaut:
PHP:
<?php
$colname_mail = "1";
if (isset($_SESSION['user_id'])) {
  $colname_mail = (get_magic_quotes_gpc()) ? $_SESSION['user_id'] : addslashes($_SESSION['user_id']);
}
mysql_select_db($database_db, $db);
$query_mail = sprintf("SELECT ID, int_mail.gelesen, COUNT(*) AS 'anzahl' FROM int_mail WHERE an = %s AND `gesperrt` = 0 GROUP BY
    int_mail.`ID`" , $colname_mail);
$mail = mysql_query($query_mail, $db) or die(mysql_error());
$row_mail = mysql_fetch_assoc($mail);
$totalRows_mail = mysql_num_rows($mail);
?>
<?php 
$result = mysql_query($query_mail, $db);

$counts = array();
while ($row = mysql_fetch_assoc($result)) {
    $counts[$row['gelesen']] = $row['anzahl'];
}

$total = $counts[0] + $counts[1];
$gelesene = $counts[1]; 
?>
Allerdings klappts nicht. Keine Ahnung wieso! In der Datenbank gibt es zwei Zeilen. Eine davon hat im Feld gelesen die 1 für gelesen
 
ArFiBa hat gesagt.:
Habs jetzt so eingabaut:
[...]
Allerdings klappts nicht. Keine Ahnung wieso! In der Datenbank gibt es zwei Zeilen. Eine davon hat im Feld gelesen die 1 für gelesen
Du schickst ja auch nicht die Abfrage an die Datenbank, die ich in meinem Code verwendet hab...


@_voodoo:
$CountThis = $CountThis++; hat den selben Effekt wie:
PHP:
$before = $CountThis;
$CountThis = $CountThis + 1;
$CountThis = $before;
($foo++) gibt nämlich den Wert von $foo zurück, den es vor der Inkrementierung hatte.
 
Zurück