1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Consulta de Mysql em PHP

Discussão em 'Web Development' iniciada por moriva, 24 de Junho de 2008. (Respostas: 22; Visualizações: 1654)

  1. moriva

    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?
     
  2. AliFromCairo

    AliFromCairo Power Member

    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: 24 de Junho de 2008
  3. moriva

    moriva Power Member

    Podes dar um exemplo dessas implementações.
    :cool:

    Agradecia!
     
  4. MPalhas

    MPalhas Power Member

    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
     
  5. AliFromCairo

    AliFromCairo Power Member

    Exacto. Tens mais exemplos no site do php, mas penso que ficas bem servido com os exemplos do MPalhas.
     
  6. moriva

    moriva Power Member

    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: 25 de Junho de 2008
  7. Armadillo

    Armadillo Folding Member

  8. moriva

    moriva Power Member

    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>
    
    
     
  9. hostmake

    hostmake Power Member

    mostra-nos os campos da tabela outra vez.
     
  10. MPalhas

    MPalhas Power Member

    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.
     
  11. moriva

    moriva Power Member

    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;
     
  12. hostmake

    hostmake Power Member

    MYSQL_QUERY("SELECT SUM(FinalEquipa1) AS n_golos FROM andebol WHERE Equipa1='".$_POST['equipa']."'");
     
  13. moriva

    moriva Power Member

    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>
    
     
  14. hostmake

    hostmake Power Member

    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 é.
     
  15. moriva

    moriva Power Member

    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.
     
  16. hostmake

    hostmake Power Member

    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: 25 de Junho de 2008
  17. moriva

    moriva Power Member

    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?
     
  18. hostmake

    hostmake Power Member

    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.
     
  19. moriva

    moriva Power Member

    Já substitui rows por row mas continua a dar isto na mesma linha:

    Não há outro comando que faça a mesma coisa para eu testar.
     
  20. hostmake

    hostmake Power Member

    my bad, mas tu também estás a dormir

    MYQSL :P

    é mysql_fetch_row
     

Partilhar esta Página