MySQL + count
Thomas D.
- datenbank
Mahlzeit liebe SELFHTML Gemeinde...
ich pflege seit einigen Jahren eine Musikseite und möchte nun ermitteln wie lange schon ein Interpret mit seinem Titel in den CHarts ist. Eigentlich kein Problem. SELECT count(*) from top100 where Interpret='Gwen Stefani) and Titel='Cool' ergibt die Summe. Nur den Haken den ich habe ist wie ermittel ich das in meinem Script ? Heisst es muss beim Aufruf der KW automatisch ermittelt werden wie lange der Interpret mit seinem Titel schon in den Charts ist. Ich poste euch mal mal Script und bräuchte da mal Hilfe...
<?php
$db = @MYSQL_CONNECT($server,$benutzer,$kennwort); mysql_select_db("charts",$db);
//$bioId = mysql_escape_string($bioId);
$result = mysql_query("SELECT * FROM top100, woche WHERE top100.jahr='$jahr' AND woche.jahr='$jahr' and top100.KW='$kw' AND woche.kw='$kw' ORDER BY 'Platz' LIMIT $pos");
while ($row = mysql_fetch_row ($result))
{
if ($row[19] == '<img border="0" src="images/single/new.gif" width="53" height="16">')
$change = '<font color="#FF0000">Neu';
else if ($row[19] == '<body bgcolor="#000080"><font size ="1" color="#FFFF00">Wiedereinsteiger</font></p>')
$change = '<img border="0" src="images/single/point.gif" width="12" height="10">';
else if ($row[6] == $row[19])
$change = '<img border="0" src="images/single/point.gif" width="12" height="10">';
else if ($row[6] < $row[19])
$change = '<img border="0" src="images/single/a_up.gif" width="12" height="10">';
else if ($row[6] > $row[19])
$change = '<img border="0" src="images/single/a_down.gif" width="12" height="10">';
echo "<table width='97%' border='2' bordercolor='#FF9900' align='center'>";
echo "<tr bgcolor='#000080'>";
echo "<td width='6%' align='center'><font color='#FFFFFF'><FONT FACE='Arial' SIZE=2><i><b>$row[6]</b></i></td>";
echo "<td width='12%' align='center'><font color='#FFFF00'><FONT FACE='Arial' SIZE=2><i><b>$row[19]</b></i></td>";
echo "<td width='5%' align='center'><i>$change</i></td>";
echo "<td width='9%' align='center'><font color='#FFFFFF'><FONT FACE='Arial' SIZE=2><i><b>$row[21]</b></i></td>";
echo "<td width='8%' align='center'><i>$row[8]</i></td>";
echo "<td width='19%' align='center'><font color='#FFAC05'><FONT FACE='Arial' SIZE=2><i><b>$row[1]</b></i></td>";
echo "<td width='19%' align='center'><font color='#FFFF00'><FONT FACE='Arial' SIZE=2><i><b>$row[2]</b></i></td>";
echo "<td width='5%' align='center'><i>$row[9]</i></td>";
echo "<td width='5%' align='center'><i>$row[14]</i></td>";
?>
<td width="9%" align="center">
<a href="biografien.php?bioId=<?php
echo urlencode($row[1]); ?>
">
<img border="0" src="images/biografie.gif" width="65" height="15" />
</a>
</td>
<?php
wo bekomme ich die Count Anweisung noch untergebracht.
Zur Veranschaulichung guckst du www.singlecharts.org
yo,
ich pflege seit einigen Jahren eine Musikseite und möchte nun ermitteln wie lange schon ein Interpret mit seinem Titel in den CHarts ist. Eigentlich kein Problem. SELECT count(*) from top100 where Interpret='Gwen Stefani) and Titel='Cool' ergibt die Summe.
damit ermittelt man nicht wielange ein titel in den charts ist, sondern wieoft. das ist kleiner aber feiner unterschied. sicherlich kann man daraus auch einen zeitraum ermitteln, da die charts in regelmäßigen abständen erscheinen.
wo bekomme ich die Count Anweisung noch untergebracht.
mit einer "korelliereden" unterabfrage, was aber wohl erst ab mysql 4.1 und höher gehen wird. wenn das nicht geht, dann nimmst du die unterabfrage mit in die while schleife der ersten abfrage rein. btw., das * würde ich in diesem fall nicht verwenden, sondern die spaltennamen angeben.
SELECT tab1.*,
(
SELECT count(*)
FROM top100 AS tab2
WHERE tab2.Interpret= tab1.interpret
AND tab1.Titel= tab2.titel
) AS Anzahl
FROM top100 AS tab1, woche
WHERE tab1.jahr='$jahr'
AND woche.jahr='$jahr'
AND tab1.KW='$kw'
AND woche.kw='$kw'
ORDER BY tab1.'Platz'
LIMIT $pos
PS: ich habe den eindruck, dass die verbindung der tabellen top100 und woche eventuell nicht ganz optimal wären. ist aber nur ein gefühl.
Ilja
Hey Ilja
Danke erstmal für deine Hilfe, ich hab bei mir Mysql 4.1 irgentwas laufen. Ich habe jetzt meine Abfrage gändert so wie du es gepostet hast.
<?php
$db = @MYSQL_CONNECT($server,$benutzer,$kennwort); mysql_select_db("mp3",$db);
//$bioId = mysql_escape_string($bioId);
$result = mysql_query("SELECT tab1.*,
(
SELECT count(*)
FROM top100 AS tab2
WHERE tab2.Interpret= tab1.interpret
AND tab1.Titel= tab2.titel
) AS Anzahl
FROM top100 AS tab1, woche
WHERE tab1.jahr='$jahr'
AND woche.jahr='$jahr'
AND tab1.KW='$kw'
AND woche.kw='$kw'
ORDER BY tab1.'Platz'
LIMIT $pos
");
while ($row = mysql_fetch_row ($result))
{
if ($row[19] == '<img border="0" src="images/single/new.gif" width="53" height="16">')
$change = '<font color="#FF0000">Neu';
else if ($row[19] == '<body bgcolor="#000080"><font size ="1" color="#FFFF00">Wiedereinsteiger</font></p>')
$change = '<img border="0" src="images/single/point.gif" width="12" height="10">';
else if ($row[6] == $row[19])
$change = '<img border="0" src="images/single/point.gif" width="12" height="10">';
else if ($row[6] < $row[19])
$change = '<img border="0" src="images/single/a_up.gif" width="12" height="10">';
else if ($row[6] > $row[19])
$change = '<img border="0" src="images/single/a_down.gif" width="12" height="10">';
nur bekomme ich dann als Fehlermeldung
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in ausgabe.php on line 155
Line 155 wäre dann
while ($row = mysql_fetch_row ($result))
wie kann das denn jetzt ??
yo,
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in ausgabe.php on line 155
wie kann das denn jetzt ??
nach der abfrage eine fehlerausgabe mit echo mysq_error() machen und dann schauen, welche fehlermeldung das genau ist. manchmal sind es einfach nur falsche tabellen oder spaltennamen oder aber es ist ein größeres problem.
Ilja
nach der abfrage eine fehlerausgabe mit echo mysq_error() machen und dann schauen, welche fehlermeldung das genau ist. manchmal sind es einfach nur falsche tabellen oder spaltennamen oder aber es ist ein größeres problem.
du meintest echo mysql_error();
echo "<td width='8%' align='center'><i>$row[8]</i></td>";
echo "<td width='19%' align='center'><font color='#FFAC05'><FONT FACE='Arial' SIZE=2><i><b>$row[1]</b></i></td>";
echo "<td width='19%' align='center'><font color='#FFFF00'><FONT FACE='Arial' SIZE=2><i><b>$row[2]</b></i></td>";
echo "<td width='5%' align='center'><i>$row[9]</i></td>";
echo "<td width='5%' align='center'><i>$row[14]</i></td>";
echo mysql_error();
?>
Thomas
Wenn ja, kommt da keine weitere Fehlermeldung
Es liegt definitiv an der Abfrage die du mir gepostet hast.
ich hab sie mal verändert
$result = mysql_query("SELECT *
FROM top100 , woche
WHERE top100.jahr='$jahr'
AND woche.jahr='$jahr'
AND top100.KW='$kw'
AND woche.kw='$kw'
ORDER BY top100.'Platz'
LIMIT $pos
");
und selbiger Fehler wie oben beschrieben.
so diese Abfrage funzt nun
SELECT top100.*,(SELECT count(*) from top100 as top100 WHERE top100.interpret= top100.interpret AND top100.titel= top100.titel) AS ANZAHL FROM top100, woche WHERE top100.jahr='$jahr' AND woche.jahr='$jahr' and top100.KW='$kw' AND woche.kw='$kw' ORDER BY 'Platz' LIMIT $pos
nur warum steht in $ANZAHL nichts drin, muessten doch eigentlich die Zahlenwerte enthalten
yo,
SELECT top100.*,(SELECT count(*) from top100 as top100 WHERE top100.interpret= top100.interpret AND top100.titel= top100.titel) AS ANZAHL FROM top100, woche WHERE top100.jahr='$jahr' AND woche.jahr='$jahr' and top100.KW='$kw' AND woche.kw='$kw' ORDER BY 'Platz' LIMIT $pos
nur warum steht in $ANZAHL nichts drin, muessten doch eigentlich die Zahlenwerte enthalten
du musst tabellen mit gleichen spaltennamen schon mit einem eindeutigen tabellennamen kennzeichnen. und da es bei der zweifachen verwendung (2 x top100) einer tabelle nur über aliase geht, musst du diese schon wie beschrieben einsetzen.
Ilja
yo,
Es liegt definitiv an der Abfrage die du mir gepostet hast.
ich hab sie mal verändert
$result = mysql_query("SELECT *
FROM top100 , woche
WHERE top100.jahr='$jahr'
AND woche.jahr='$jahr'
AND top100.KW='$kw'
AND woche.kw='$kw'
ORDER BY top100.'Platz'
LIMIT $pos
");und selbiger Fehler wie oben beschrieben.
war das nicht deine abfrage oder habe ich da einen fehler beim kopieren gemacht ? wie auch immer, wenn es jetzt funtzt um so besser...
Ilja