php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.04.2005, 14:15  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard count "eingränzen"

Hi,

mit unten stehendem Code hole ich u.a. die (Gesamt-)Anzahl der für ein Spiel eingegeben Kommantare.

Jetzt kam aber in der Tabelle der Kommentare noch ein Feld 'status' dazu (status von 0-2 sind möglich). Wobei status=2 gesperrt bedeuted und deswegen in die Gesamtanzahl von count nicht mit dazuzählen soll.

Wie kann ich also dem count beibringen, dass nur die Zeilen mit gezählt werden sollen, die entweder

status == "1" haben

oder

status == "0" wenn die Zeit des Kommentars älter wie 24h (86400 sec) ist

PHP-Code:
<?
$enddatum
=time();
$startdatum=$enddatum-604800;

$sqlbefehl"Select b.jugend,b.id,b.spdatum,b.zeit,b.sptag,b.sptag2,b.spiel,u.nickname,k.status,k.time, Count(k.spielid) As komcount
             From $jugendtab b
             Left Outer Join $tab_user u on u.id=b.autor
             Left Join $tab_kommentare k on k.spielid=b.id
             WHERE b.spdatum BETWEEN $startdatum AND $enddatum
             Group By b.id,b.zeit,b.sptag,b.spiel,u.nickname
             Order By b.jugend, b.sptag2 DESC, b.sptag DESC"
;
$ergebnis  mysql_query($sqlbefehl$serverid);
echo 
mysql_error($serverid);
//Template initialisieren
$TLetzter=new Template("tpl/letzter.html");
//Template setzen
while ( $jugend mysql_fetch_array ($ergebnis)) {
    
//Vars setzen
    
$jugend_jugend   $jugend['jugend'];
    
$jugend_sptag    stripslashes(htmlspecialchars($jugend['sptag']));
    
$jugend_sptag2    stripslashes(htmlspecialchars($jugend['sptag2']));

    if (
$jugend_sptag2 == "Hinrunde") {
        
$jugend_sptag2    ereg_replace("Hinrunde""H"$jugend_sptag2);
        }
    if (
$jugend_sptag2 == "Rueckrunde") {
        
$jugend_sptag2    ereg_replace("Rueckrunde""R"$jugend_sptag2);
        }
        
    
$jugend_sptag2    ereg_replace("Rueckrunde""R"$jugend_sptag2);
    
$jugend_sptag2    ereg_replace("Hinrunde""H"$jugend_sptag2);
    
$jugend_spiel    formatjugend($jugend['spiel']);
    
$jugend_zeit     date("d.m.Y, H:i",$jugend['zeit']+$time_offset);
    
$jugend_spdatum  date("d.m.Y - H:i",$jugend['spdatum']+$time_offset);
    
$jugend_nickname stripslashes(htmlspecialchars($jugend['nickname']));
    
$jugend_id       $jugend['id'];
    
$jugend_komcount $jugend['komcount'];

    eval(
$TLetzter->TemplateVar("tpl_letzter"));
}
echo 
$tpl_letzter;
?>
Heart ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.04.2005, 14:18  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

über HAVING ? oder einen weiteren eintrag bei WHERE?

mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 04.04.2005, 14:47  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

...wenn ich bei WHERE obiges dazu schreibe, werden mir doch nicht mehr alle Spiele angezeigt!?

D.h. alle Spiele mit z.b. status=2 fallen dann raus, was ich ja nicht will. Die Spiele, die einen Kommtar mit status=2 haben, sollen ja angezeigt werden, aber eben der Zähler der abgegeben Kommentare soll eben diese nicht mitzählen.

Sitz wohl gerade auf der Leitung....
Heart ist offline   Mit Zitat antworten
Alt 04.04.2005, 14:51  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

das wirst du in einem query höchstens mit subquerys erreichen, was mysql 4.1 vorraussetzt.
robo47 ist offline   Mit Zitat antworten
Alt 04.04.2005, 15:13  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

MySQL Server Version: 4.1.7-log
MySQL Client Version: 4.1.10a

wäre vorhanden....

Dann ginge es wie?
Heart ist offline   Mit Zitat antworten
Alt 04.04.2005, 15:16  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

muss ich leider passen :P war nur ein theorhetischer ansatz, ich hab mich mit subselects noch zu wenig beschäftigt.

abgesehen davon, hast du das auch in der produktiv-umgebung zur verfügung? also mysql 4.1
robo47 ist offline   Mit Zitat antworten
Alt 04.04.2005, 15:26  
Gast
 
Beiträge: n/a
Standard

wenn ich dich richtig verstanden habe, eventuell so:
Code:
$sqlbefehl=
"Select
   b.jugend,b.id,b.spdatum,b.zeit,b.sptag,b.sptag2,b.spiel,u.nickname,k.status,k.time,

/*
   nicht mit: ---> Count(k.spielid) As komcount
   sondern so:
*/
   SUM(if(k.status = 2, 0, 1)) As komcount  <-------------------------

             From $jugendtab b
             Left Outer Join $tab_user u on u.id=b.autor
             Left Join $tab_kommentare k on k.spielid=b.id
             WHERE b.spdatum BETWEEN $startdatum AND $enddatum
             Group By b.id,b.zeit,b.sptag,b.spiel,u.nickname
             Order By b.jugend, b.sptag2 DESC, b.sptag DESC";
mfG ~dilemma~
  Mit Zitat antworten
Alt 04.04.2005, 16:01  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Kannst Du mir
Code:
SUM(if(k.status = 2, 0, 1)) As komcount
bitte genau erläutern.....

....weil jetzt ist zwar bei dem Spiel, welches einen Kommentar mit status=2 beinhaltet der Zähler auf "0" steht (so wie es ja auch passen würde), aber bei einem anderen Spiel ist der Zähler auf "1", obwohl überhaupt kein Kommentar abgegeben wurde
Heart ist offline   Mit Zitat antworten
Alt 04.04.2005, 16:26  
Gast
 
Beiträge: n/a
Standard

eventuell:
Code:
SUM(if(k.status = 2 OR k.kommentarspalte = '', 0, 1)) As komcount
/* -----------------^^^^^^^^^^^^^^^^^^^^^^^^^--------------------- */
   man muss dann auch noch 'nachsehen' ob in der entsprechenden Spalte der Kommentar-Tabelle,
   die den Kommentar enthält, etwas drin steht!
*/
Dadurch sollte eine Summe aus 0 bzw. 1 -Werten gebildet werden.
Und zwar,
wenn k.status = 2 oder k.kommentarspalte = '' wird der Wert 0 addiert,
ansonsten wird der Wert 1 addiert.

~dilemma~
  Mit Zitat antworten
Alt 04.04.2005, 16:51  
Erfahrener Benutzer
 
Registriert seit: 23.06.2004
Beiträge: 139
Heart zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ok, es scheint bei Spielen, die Kommentar(e) haben, zu funktionieren.... (egal welcher status vorhanden ist, also auch bei status=2 funktioniert es)

Hat ein Spiel aber noch keinen Kommentar, dann wird "1" anstatt der "0" angezeigt
Heart ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mit count ein count zählen? ph!l Datenbanken 2 16.10.2007 16:21
count() und null-werte woly Datenbanken 7 04.04.2007 15:40
Count über mehrere Tabellenspalten plastic Datenbanken 3 20.10.2006 17:52
problem beim mehrfachen joinen einer tabelle und count() PHS Datenbanken 3 03.08.2006 16:49
"Column count doesn't match value count at row 1" möchtegernchegga Datenbanken 3 05.03.2006 16:07
UPDATE count nach Link Aufruf ? PHP Tipps 2006 9 22.01.2006 14:53
MySQL error: Column count doesn't match value count at row 1 atom-dragon PHP Tipps 2005-2 4 21.07.2005 01:38
PEAR::DB LimitQuery was ist Count? PHP Tipps 2005-2 3 06.06.2005 18:02
mehrere COUNT() auf selbe Tabelle und »can't reopen table« tapferesschneiderlein Datenbanken 3 04.04.2005 13:51
Crosstable SELECT und COUNT() fantast Datenbanken 2 27.01.2005 15:35
[Erledigt] MySQL meldet Column count doesn't match value count at row Datenbanken 4 21.10.2004 10:45
Logfile auswerten/ Problem mit DISTINCT und count und co... supertramp Datenbanken 4 21.09.2004 01:39
[Erledigt] COUNT() Problematik... Datenbanken 2 20.08.2004 13:48
[Erledigt] MYSQL Count problem Datenbanken 1 02.08.2004 19:38
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php eingränzen, zb_status 2

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:06 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.