Probleem uitlezen en berekenen db data

Status
Niet open voor verdere reacties.

snookie

Gebruiker
Lid geworden
16 apr 2001
Berichten
123
Wie kan mij op weg helpen met het volgende SQL probleem:

Betreft een voetbalsite waarbij ik PHPMySQL gebruik.

Wegschrijven van data naar tabel is geen probleem.
Uitlezen alle data en weergeven is ook geen probleem.

Betreft een voetbalsite waarbij ik graag de topscoorders in lijst wil weergeven te beginnen met de spelers die de meeste goals gemaakt heeft en uiteraard mag een speler deze maar één keer in de tabel voorkomen. Wekelijks komen de doelpunten makers bij in de db.

Hieronder hoe de data is weggeschreven en benaderd kan worden.

voetballer_A 02/09/2007 1 (goal)
voetballer_B 02/09/2007 2
voetballer_C 02/09/2007 1
voetballer_A 16/09/2007 2
voetballer_B 16/09/2007 3
enz.

gewenste lijst (weergave)

voetballer_B 5(goals)
voetballer_A 3
voetballer_C 1

Alvast bedankt voor diegene die op op weg kan helpen.
Greetz
 
Dat kun je op deze manier doen:

PHP:
select voetballer
,      sum(goal) goals
from   tabel
group by goals
order by goals desc

Eventueel kun je nog de regel "limit 10" toevoegen (extra regel onderaan de sql) als je bijvoorbeeld alleen de top 10 wilt hebben.
 
Beste Epic,

De code kan ik volgen maar niet inpassen in een string.
Hieronder de code, iemand een idee waar het fout loopt?
Databse connect is ok en eerste gedeelte werkt en geeft alles weer, geeft een T_String fout.
beschikbare velden in db:
Speler text
Datum text
Wedstrijd text
Goals int (11)
Comment text

Alvast bedankt voor de feedback.
----------------------------
PHP:
<b>Competitiedoelpunten 1ste ploeg:</b><p>
 
 			<?php
			$host = "localhost"; 
                                                $user = "xxxxxxxx";
			$pass = "xxxxxxx"; 
			$db = "xxxxxxx"; 			
			$conn = mysql_connect("$host", "$user", "$pass") or die ("Unable to connect to database."); 
			mysql_select_db("$db", $conn);

	
			if(mysql_result(mysql_query("SELECT COUNT(ID_GOAL) FROM `doelpuntenmakers_1`"),0) == 0)
			
  			{
   			echo 'Er is nog geen data aanwezig in de database';
  			}
			else
			{
 			?>
			<table span class="style1">
			<tr>
   			<td align="center"><b>Speler:</b></td>
			<td>&nbsp;</td>
			<td align="center"><b>Datum:</b></td>
			<td>&nbsp;</td>
			<td align="center"><b>Wedstrijd:</b></td>
			<td>&nbsp;</td>
			<td align="center"><b>Aantal goals:</b></td>
			<td>&nbsp;</td>
			<td align="center"><b>Comment:</b></td>
			</tr>
          	<?php
 			 $qSelect_berichten  = mysql_query('SELECT * FROM `doelpuntenmakers_1`') or die (mysql_error());
 			 while($aBerichten = mysql_fetch_array($qSelect_berichten))
   			 {
   			   echo '<tr>
        		    <td align="left">'.$aBerichten['Speler'].'</td>
					<td>'."&nbsp;".'</td>
        		    <td align="right">'.$aBerichten['Datum'].'</td>
					<td>'."&nbsp;".'</td>
        		    <td align="left">'.$aBerichten['Wedstrijd'].'</td>
					<td>'."&nbsp;".'</td>
        		    <td align="center">'.$aBerichten['Goals'].'</td>
					<td>'."&nbsp;".'</td>
        		    <td align="left">'.$aBerichten['Comment'].'</td>
        		    </tr><p>';
   			 }

[B]// Hier volgt de code om de topscoorders weer te geven[/B]


 			 $qSelect_berichten  = mysql_query('SELECT Speler, SUM (Goals) FROM 'doelpuntenmakers_1'
			GROUP BY Goals
			ORDER BY Goals DESC') or die (mysql_error());
 			 while($aBerichten = mysql_fetch_array($qSelect_berichten))
			 
   			 {
   			   echo '<tr>
        		    <td align="left">'.$aBerichten['Speler'].'</td>
					<td>'."&nbsp;".'</td>
        		    <td align="right">'.$aBerichten['Goals'].'</td>
					</tr>';
   			 }			 
	 
			//einde tabel
     		echo '</table>';
   			}			
			
			
			
			
			//databaseverbinding sluiten
			mysql_close();
			?>
 
Laatst bewerkt door een moderator:
Er zitten 2 foutjes in, waaronder één van mij. Sorry daarvoor :eek:. Achter "SUM(Goals)" moet nog een alias, waarop gesorteerd wordt en welke later in php gebruikt wordt. En groeperen (group by) moet op Speler, niet op Goals.

PHP:
SELECT Speler, SUM(Goals) Goals FROM 'doelpuntenmakers_1'
GROUP BY Speler
ORDER BY Goals DESC
 
Een andere fout zit ook bij de query-aanroep.

PHP:
$qSelect_berichten  = mysql_query('SELECT Speler, SUM (Goals) FROM 'doelpuntenmakers_1'
            GROUP BY Goals
            ORDER BY Goals DESC') or die (mysql_error());

moet worden

PHP:
$qSelect_berichten  = mysql_query("SELECT Speler, SUM (Goals) goals FROM 'doelpuntenmakers_1'
            GROUP BY Goals
            ORDER BY Goals DESC") or die (mysql_error());

Het punt zit 'm in de single-quotes; de '. Aangezien je in het bovenste voorbeeld de string ook begint met een single-quote, ishet verschil tussen de string en de tabelnaam niet meer duidelijk (als je me nog snapt :p).

Daarom als tip: begin en eindig een string met een dubbel-quote ", zodat je een single-quote gewoon kunt gebruiken.
 
Met onderstaande code is het me uiteindelijk gelukt.
Was ook op een verkeerd spoor dat de tijdelijke value (van de tot. goals) niet tussen de haakjes achter SUM is maar direct erachter, had deze gewisseld.
PHP:
			$qSelect_berichten = mysql_query('SELECT *,SUM([B]Goals[/B]) [COLOR="Red"][B]doelp [/B][/COLOR]FROM [COLOR="Red"][B]`[/B][/COLOR]doelpuntenmakers_1[COLOR="Red"][B]`[/B][/COLOR] GROUP BY Speler ORDER BY doelp DESC') or die (mysql_error());
			while($aBerichten = mysql_fetch_array($qSelect_berichten))
			{
			echo '<tr>
			<td align="left">'.$aBerichten['Speler'].'</td>
			<td>'."&nbsp;".'</td>
			<td align="right">'.$aBerichten['doelp'].'</td>
			</tr><p>';
			}
Wat de quotes betreft deze werken bij mij wel en er zit verschil op hoor, kijk maar eens naar de quotes in het rood voor en na doelpuntenmakers_1

Alvast bedankt voor de prachtige hulp die jullie gegeven hebben, greetz Snookie
:thumb::thumb::thumb:
 
Laatst bewerkt door een moderator:
Wat de quotes betreft deze werken bij mij wel en er zit verschil op hoor, kijk maar eens naar de quotes in het rood voor en na doelpuntenmakers_1

Alvast bedankt voor de prachtige hulp die jullie gegeven hebben, greetz Snookie
:thumb::thumb::thumb:

Zo kan het ook ja, maar ik heb een hekel aan die back-ticks-dingen :)
En in de bovenstaande code had je een gewone single-quote.

Mooi dat het nu werkt :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan