Archivlink: javarea.de Forum > PHP, MySQL & CGI > alles Datensätze mit wert zählen aber nur einen ausgeben
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > alles Datensätze mit wert zählen aber nur einen ausgeben

Pages: [1]

geschrieben von rich am 08.09.2010 - 23:14
Hallo, ich weiss nicht so recht wie ich das beschreiben, nennen oder bezeichnen soll
vielleicht gibt es das auch schon aaaaber da ich nicht weiss wo nach ich suchen muss frag ich einfach mal.

ich hab eine Tabelle wo Namen, Vorname, plz... .... .... neu ... .... usw.

das Feld "neu" hat jeweils einen Wert von 0 oder 1.

wenn 0 als wert angegeben ist, wird durch eine bedingung "keine einträge" angezeigt.
steht eine 1 als wert, wechselt die bedingung auf ein image.

da ich aber mehrere personen auf 1 habe, sollen diese gezählt und ausgegeben werden.
ich möchte aber, dass nur das der wert (also 1) einmal ausgeben wird.
auch wenn dieser 5mal in der Tabelle existiert.

zB:

id:1 nameeter neu:1
id:2 name:hans neu:1
id:3 name:nils neu:1

hier soll nur einmal 1 ausgegeben werden
aber auch wenn:

id:1 nameeter neu:0
id:2 name:hans neu:1
id:3 name:nils neu:1

oder

id:1 nameeter neu:0
id:2 name:hans neu:0
id:3 name:nils neu:1

in der Tabelle bzw. spalte eingetragen ist.

war das soweit verständlich?
vielleicht kann ja jemand helfen.

geschrieben von rich am 09.09.2010 - 10:20
hab es gerade selber hinbekommen =)
mit

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 

<?
$einlesen 
mysql_query(\"SELECT * FROM tabelle WHERE wert=\'1\'\");
if(mysql_num_rows(
$einlesen)) echo \"<a href=\'page.php\'><img src=\'neu3.gif\' info=weiter\' height=\'10\' border=\'0\'></a>\";
else echo \"leer\";
?>



geschrieben von Danny am 10.09.2010 - 16:02
Hallo rich,

schön das du es hinbekommen hast. Wenn dich NUR die Anzahl der Datensätze interessiert empfehle ich dir nicht mysql_num_rows zu verwenden. Bei deiner Methode sucht er alle Datensätze die wert = 1 haben raus und speichert die. Wenn du sie dann mit mysql_fetch_array o.ä. holst ist das ok, aber wenn du sie gar nicht brauchst dann hast du die ja umsonst MySQL speichern lassen.
Da würde ich direkt ein Query verwenden was mit nur die Anzahl zurückgibt.

HTML-Quelltext
1: 
SELECT COUNT(*) AS ANZAHL FROM tabelle WHERE wert = '1'


Ich weiß nicht um wieviele Daten es sich bei den Ergebnismengen handelt .. bei wenigen macht es sicherlich spürbar keinen Unterschied aber wenn es um größere Zahlen geht sollte man auf Optimierungen aller Art achten.

Gruß

geschrieben von rich am 13.09.2010 - 21:09
hallo danny
nein es geht lediglich um nicht mehr als max 20 Datensätze.
also hier sind keine großen Daten zu erwarten

allerdings hab ich da doch noch ne frage.

ich habe in der Datenbank unter Tabelle: Nachrichten folgende spalten

nachrichten_id , nachrichten_von, nachrichten_an , nachrichten_subject , nachrichten_text, nachrichten_zeit, regdate, Rang , Foto ,nachrichten_text_reply ,nachrichten_pm

ich möchte, dass nachrichten_an und nachrichten_pm gezählt wird.

also wenn zB

nachrichten_an = rich
nachrichten_pm = 0

kommt natürlich nichts... aber bei

nachrichten_an = rich
nachrichten_pm = 1

soll dann gezählt werden...
die nachrichten_pm = 1 bedeutet , dass die nachricht noch nicht gelesen wurde alle einträge die mit dem nick+1 die sich in der spalte bzw tabelle befinden sollen aufgezählt werden und dann jeweils so ausgeben (in deinem Posteingang befinden sich noch 5 neue Nachrichten).

is das verständlich ??
ich glaube das geht mit GROUP aber irgendwie funtionierten die beispiele (wenns denn überhaupt die richtigen waren) im Netz auch nicht so richtig ^^

geschrieben von Danny am 14.09.2010 - 11:41
Wenn ich dich richtig verstanden habe möchtest du die Anzahl der Datensätze in denen nachrichten_pm = 1 und nachrichten_an = rich ist oder ?

HTML-Quelltext
1: 
SELECT * FROM `nachrichten` WHERE nachrichten_pm = 1 AND nachrichten_an = 'rich'


und dann wieder entsprechend mit mysql_num_rows() zählen.

Gruß

geschrieben von rich am 14.09.2010 - 18:11
ja danke das jat funktioniert genau das, wollte ich haben.
jetzt hab ich aber noch etwas.

und zwar, hab ich eine bedingung:

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 

<?
include("header.php");
?>
<ul>
<?
include("links.php");
?>
<TD height=418 background=Dateien/strich_m.png width=2></TD>
<TD style="BACKGROUND-IMAGE: url(img/v1/portal/verlauf.png); BACKGROUND-COLOR: #f8f8f8; BACKGROUND-REPEAT: repeat-x" height=418 vAlign=top width=656>
<br />

<?php
$sql
="SELECT * FROM ".$prefix."nachrichten";
$result=mysql_query($sql);
while (
$rows mysql_fetch_array($result))
{
?>

<!-- Inhalt MITTE Anfang -->
<TABLE cellSpacing=0 cellPadding=0 width=300>
<TBODY>
<TR>
<TD vAlign=top>

<!-- Anfang Feld 6 -->
<TABLE cellSpacing=0 cellPadding=0 width=500 align=center>
<TBODY>

<?
$berechtigung 
= ($rows["nachrichten_pm"]);
if ( 
$berechtigung == "1" )
{
 echo 
"<TR><TD>";
 echo 
"<IMG class=noborder src='Dateien/ol.png'></TD>";
 echo 
"<TD background=Dateien/om.png width=500><B>";
 echo 
"<IMG class=noborder align=top src='einladen.png'>&nbsp;Info du hast Neue Nachrichten</B></TD>";
 echo 
"<TD><IMG class=noborder src='Dateien/or.png'></TD></TR>";
 echo 
"<TR><TD background=Dateien/ml.png></TD>";
 echo 
"<TD bgColor=#f6f6f6 vAlign=top>";

 echo 
"<a href='pm_inbox.php'><center><img src='images/mail/email1.jpg' info='hallo' height='75' border='0'></center></a><br /><br />";

 echo 
"es befinden sich <font color='orange'><b>";

$sql "SELECT COUNT(*) as nachrichten_pm FROM nachrichten WHERE nachrichten_pm='1'";
$result mysql_query($sql) OR die(mysql_error());
$row mysql_fetch_assoc($result);
echo 
$row['neu'];

 echo 
"</b></font> neue <font color='green'>Nachricht(en)</font> im Posteingang...</B>";
 echo 
"</TD><TD background=Dateien/mr.png></TD></TR>";
 echo 
"<TR><TD><IMG class=noborder src='Dateien/ul.png'></TD>";
 echo 
"<TD background=Dateien/um.png></TD>";
 echo 
"<TD><IMG class=noborder src='Dateien/ur.png'><TR><TD></TR></TD>";
 echo 
"<TD><br /></TD>";

}
else
{
 echo 
"";
}
}
?>

<TR><TD>
<IMG class=noborder src='Dateien/ol.png'></TD>
<TD background=Dateien/om.png width=500><B>
<IMG class=noborder align=top src='Dateien/freunde_einladen.png'>&nbsp;Info:</B></TD>
<TD><IMG class=noborder src='Dateien/or.png'></TD></TR>
<TR><TD background=Dateien/ml.png></TD>
<TD bgColor=#f6f6f6 vAlign=top>
<br />

</TD><TD background=Dateien/mr.png></TD></TR>
<TR><TD><IMG class=noborder src='Dateien/ul.png'></TD>
<TD background=Dateien/um.png></TD>
<TD><IMG class=noborder src='Dateien/ur.png'><TR><TD></TR></TD>
<TD><br /></TD>

</TD></TR></TBODY></TABLE>
<!-- Inhalt MITTE Ende -->
</TD></TR></TBODY></TABLE><BR><BR></TD></TR></TBODY></TABLE>
<?
//include("footer.php");
?>
</TD></TR>



im moment ist es so, das durch die Schleife ja alle nachrichten gezählt werden,
ich möchte das aber genau so haben , wie im beispiel oben, nur dass nicht die einträge gezählt werden sondern das angezeigt wird, dass einträge vorhanden sind.

also nicht mysql_num_rows() = zahl der neuen mails... sondern
zB mysql_array_rows() = eintrag vorhanden (dieser dürfte auch nur einmal angezeigt werden)

und da, wo du das COUNT findest sollen auch die neuen vorhanden mails angezeigt werden ^^
lieben gruß

geschrieben von rich am 16.09.2010 - 23:17
niemand eine antwort?

geschrieben von Danny am 16.09.2010 - 23:43
Verstehe nicht ganz wie du das meinst, ein Eintrag ist doch vorhanden wenn die Anzahl der Einträge >= 1 ist ?

Gruß

geschrieben von rich am 17.09.2010 - 19:39
hey okay da hab ich mich dämlich ausgedrückt...

wie kann ich es bewerkstelligen, dass nicht die Zahl der vorhanden Nachrichten angezeigt wird sondern nur, dass Nachrichten vorhanden sind.

in dem Beispiel mit dem Code von dir werden hier die Nachrichten die in der Zeile (nachrichten_pm = 1" und den nick nachrichten_an = 'rich'";) enthalten gezählt und angezeigt.

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 

<?
$sql 
"SELECT * FROM `nachrichten` WHERE nachrichten_pm = 1 AND nachrichten_an = 'rich'";
$result mysql_query($sql) OR die(mysql_error());

echo 
mysql_num_rows($result);
?>



jetzt möchte ich mit dem gleichen befehl (SELECT * FROM `nachrichten` WHERE nachrichten_pm = 1 AND nachrichten_an = 'rich'";) nicht die einträge zählen, sondern nur dass welche vorhanden sind anzeigen lassen.

zB. wenn neue nachrichten für den User eingegangen sind mochte ich als Echo eine 1 haben ansonsten eine 0.

mit der 1 bzw 0 wird dann eine Bedingung gefüllt ^^

lieben gruß
rich

geschrieben von Danny am 17.09.2010 - 19:47
Ich würde ganz einfach die neuen nicht gelesenen NAchrichten zählen und überprüfen ob die Anzahl größer als 0 ist.

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 

<?
$sql 
"SELECT * FROM `nachrichten` WHERE nachrichten_pm = 1 AND nachrichten_an = 'rich'";
$result mysql_query($sql) OR die(mysql_error());

$unreadMessagesAvailable = (mysql_num_rows($result) > 0)?true:false;

// und dann kannst du
if($unreadMessagesAvailable) {
    echo 
"Neue Nachrichten vorhanden";
} else {
    echo 
"keine neuen Nachrichten vorhanden);
}
?>




Gruß Danny

P.S. Das $unreadMessagesAvailable = (mysql_num_rows($result) > 0)?true:false; ist nur eine Kurzschreibweise für

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 

<?
if(mysql_num_rows($result) > 0) {
    
$unreadMessagesAvailable true;
} else {
    
$unreadMessagesAvailable false;
}
?>


geschrieben von rich am 17.09.2010 - 20:50
Klasseeeeeeee ich freu mich =)

funktioniert alles so, wie ich das möchte.
wieder einmal was dazu gelernt.
vielen dank.


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.