Consulta de Mysql em PHP

moriva

Power Member
Tenho uma consulta feita em mysql que mostra o numero de jogos de cada equipa.

Código:
SELECT Equipa, COUNT(*)
FROM ( 
         SELECT Equipa1 AS Equipa
         FROM andebol
         UNION ALL
         SELECT Equipa2 AS Equipa
         FROM andebol 
       ) AS U
GROUP BY Equipa

Agora queria fazer uma consulta ao numero de jogos de uma equipa mas o código dá erro.

Código:
 <?php
       require_once('connect.php');
       $sql = "SELECT COUNT(*) AS n_jogos WHERE ((Equipa1='". $_POST['equipa']."') Or  (Equipa2='". $_POST['equipa']."'))";
       $result=mysql_query($sql);  
    ?>
      <form>
     <table>
          <tr>
          <td>Nome Equipa</td>
          <td>Numero Jogos</td>
          </tr>
          <tr>
          <td><?php echo $_POST['equipa']; ?></td>
          <td><?php echo row['n_jogos']; ?></td>
          </tr>
        </table>

Aparentemente o erro parece ser a falta de

Código:
<?php while ($row = mysql_fetch_array ($result)){ ?>

mas se colocar isso tambem da erro. Podem-me ajudar?
 
Boas, podes utilizar a função mysql_fetch_array ou mysql_result para obteres os resultados, embora não precisas do while, pois vais obter apenas uma linha.

Alternativamente, podes não utilizar o COUNT e utilizar em seguida o mysql_num_rows para contar o número de linhas (i.e. número de jogos).
 
Última edição:
no teu segundo código, falta-te o FROM na query

como disseste e bem, o erro é também por faltar isto:
$row = mysql_fetch_array ($result)
mas não precisa do while, porque é só um registo


se fosse com o mysql_result(), deixava de ser preciso essa linha do mysql_num_rows, e em vez de $row['n_jogos'] punhas:
mysql_result($result, 0, 'n_jogos')

o zero é para ir buscar o primeiro registo da query, e n_jogos é o campo pretendido


o que o AliFromCairo estava a dizer é que em vez de fazeres:
SELECT COUNT(*) as n_jogos...

podes fazer a query sem o count, ou seja SELECT * FROM, e depois usas a função mysql_num_rows($result) para saber quantos registos tem o resultado (que vai retornar o mesmo resultado que o COUNT)

vai tudo dar ao mesmo, por isso cada um faz como preferir
 
Optei por utilizar a técnica de mysql_result. Implementei-o no meu código mas dá erro.
O browser indica o erro na linha que está a vermelho.
Código:
<?php
       $sql = "SELECT COUNT(*) AS n_jogos FROM andebol WHERE ((Equipa1='". $_POST['equipa']."') Or  (Equipa2='". $_POST['equipa']."'))";
       $result = mysql_query($sql);  
    ?>
      <form>
     <table>
          <tr>
          <td>Nome Equipa</td>
          <td>Numero Jogos</td>
          </tr>
         [COLOR=Red] <?php ($row = mysql_fetch_array ($result)){ ?> [/COLOR]
          <tr>
          <td><?php echo $_POST['equipa']; ?></td>
          <td><?php echo mysql_result($result, 0, 'n_jogos') ?></td>
          </tr>
        </table>
Alguem sabe o que se passa?Desculpem a insistência.
 
Última edição:
Alguem sabe como fazer o resto da consulta a vermelho do mesmo genero mas em vez do numero de vitorias ser com o numero de golos marcados. Reparem que tem que ter um post de uma equipa que vem de um ficheiro anterior.
Obrigado pela atenção!
Código:
<?php
       $sql = "SELECT COUNT(*) AS n_golos FROM andebol WHERE [COLOR=Red]((Equipa1='". $_POST['equipa']."' and FinalEquipa1>FinalEquipa2) Or  (Equipa2='". $_POST['equipa']."' and FinalEquipa2>FinalEquipa1))";[/COLOR]
       $result = mysql_query($sql); 
    ?>
      <form>
     <table>
          <tr>
          <td>Nome Equipa</td>
          <td>Numero de Golos</td>
          </tr>
          <?php ($row = mysql_fetch_array ($result)) ?> 
          <tr>
          <td><?php echo $_POST['equipa']; ?></td>
          <td><?php echo mysql_result($result, 0, 'n_golos') ?></td>
          </tr>
        </table>
 
pelos vistos percebeste mal o que eu disse. ou usas o mysql_fetch_array, ou usas o mysql_result. não os dois ao mesmo tempo. esta linha em que tinhas a duvida:
<?php ($row = mysql_fetch_array ($result)){ ?>

é completamente inutil no teu código, porque o mysql_result não precisa disso

para saber quantos golos tem, depende de como tens a base de dados, mas tenta, em vez de pores "COUNT(*)", pões SUM(golos_marcados)

o COUNT diz quantos registos há, o SUM diz a soma dos valores dos registos, por isso deve ser o que queres

repara que é só um exemplo, porque eu não faço ideia como tens a base de dados. tens que adaptar isso á tua.
 
O problema é que eu queria a soma dos golos marcados de uma determinada equipa que vem no post de um ficheiro anterior.

A base de dados é esta:

CREATE TABLE IF NOT EXISTS `andebol` (
`Cod_Jogo` bigint(20) NOT NULL auto_increment,
`Tipo` varchar(20) NOT NULL default '',
`Data` date NOT NULL default '0000-00-00',
`Hora` time NOT NULL default '00:00:00',
`Local` varchar(20) NOT NULL default '',
`Equipa1` varchar(50) NOT NULL default '',
`Equipa2` varchar(50) NOT NULL default '',
`Periodo1Equipa1` int(50) NOT NULL default '0',
`Periodo1Equipa2` int(50) NOT NULL default '0',
`Periodo2Equipa1` int(50) NOT NULL default '0',
`Periodo2Equipa2` int(50) NOT NULL default '0',
`FinalEquipa1` int(50) NOT NULL default '0',
`FinalEquipa2` int(50) NOT NULL default '0',
PRIMARY KEY (`Cod_Jogo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
Só há um pequeno pormenor é que a mesma equipa pode estar nos campos FinalEquipa1 e FinalEquipa2.
Coloquei este codigo mas não mostra o numero total de golos.

Código:
<?php
       $sql = "SELECT SUM(FinalEquipa1) AS n_golos FROM andebol WHERE Equipa1='".$_POST['equipa']."' OR Equipa2='".$_POST['equipa']."'";
       $result = mysql_query($sql); 
    ?>
      <form>
     <table>
          <tr>
          <td>Nome Equipa</td>
          <td>Numero de Golos</td>
          </tr>
          <?php ($row = mysql_fetch_array ($result)) ?> 
          <tr>
          <td><?php echo $_POST['equipa']; ?></td>
          <td><?php echo mysql_result($result, 0, 'n_golos') ?></td>
          </tr>
        </table>
 
FinalEquipa1 é onde estão os golos não é?

Se é, o código está bem, mas estar a chamar as contas ao FinalEquipa1, tens que saber se é da Equipa1 ou Equipa2, que queres saber.

Ah, mas tu provavelmente queres saber de todos os jogos ao mesmo tempo, em casa e fora, hum..

Para não inventar muito, é melhores fazeres 2 selects para em vez de teres o OR, só um deles vai ter resultados, depois fazes um if ao num_rows para saber qual é.
 
E não há uma maneira de fazer num só select do mesmo género das consultas que eu postei aqui anteriormente. Parece ser mais eficiente do que estar a fazer dois selects.

Se poder ser vão dando exemplos que é mais fácil de compreender.

Obrigadão!! Cumprimentos.
 
Eu aconselho-te isto, nem sempre menos linhas é sinal de eficiência:

(edit: e neste caso se fizesses tudo num select, tinhas que acrescentar o nome da equipa ao que ias buscar, e depois fazer um if para não somares valores errados)
PHP:
$select1 =  "SELECT SUM(FinalEquipa1) AS n_golos1 FROM andebol WHERE Equipa1='".$_POST['equipa']."'";
$n_golos1 = myqsl_fetch_row($select1);
$select2 = "SELECT SUM(FinalEquipa2) AS n_golos2 FROM andebol WHERE Equipa2='".$_POST['equipa']."'";
$n_golos2 = myqsl_fetch_row($select2);

$n_golos1[0] + $n_golos2[0]
 
Última edição:
Fiz como me indicas-te mas mesmo assim da um erro numa linha.
Código:
 <?php       
       $select1 =  "SELECT SUM(FinalEquipa1) AS n_golos1 FROM andebol WHERE Equipa1='".$_POST['equipa']."'";
      [COLOR=Red] $n_golos1 = myqsl_fetch_rows($select1);[/COLOR]
       $select2 = "SELECT SUM(FinalEquipa2) AS n_golos2 FROM andebol WHERE Equipa2='".$_POST['equipa']."'";
       $n_golos2 = myqsl_fetch_rows($select2);
       $n_golos = $n_golos1[0] + $n_golos2[0];
    ?>
      <form>
     <table>
          <tr>
          <td>Nome Equipa</td>
          <td>Numero de Golos</td>
          </tr>
          <?php ($row = mysql_fetch_array ($result)) ?> 
          <tr>
          <td><?php echo $_POST['equipa']; ?></td>
          <td><?php echo $n_golos ?></td>
          </tr>
        </table>

Não será mysql_num _rows em vez de mysql_fetch_rows?
 
eu não disse rows, disse:

mysql_fetch_row, que é quando só tens um resultado, e queres ir busca-lo por ordem de select, neste caso [0], dai as somas em baixo.
 
Back
Topo