2014-02-17 26 views
0

我試圖在Zend 1.12中得到以下查詢的相同結果。Zend中的複雜查詢1.12

SELECT te.id_usuario, u.nome, te.id_texto, t.titulo 
    FROM usuarios u, tex_turmas_alunos ta, tex_testes te, tex_textos t, publicacoes p 
    WHERE te.id_usuario=u.id 
     and u.id=ta.id_aluno and ta.id_turma=10 
     and te.id_texto=t.id 
     and te.acertou = 'sim' 
     and ta.ativo='sim' 
     and te.id_texto=p.id_texto and p.id_turma=ta.id_turma 
    GROUP BY te.id_usuario, t.id 
    ORDER BY u.nome, t.titulo 

這是我的代碼:

1:

$select = 
$this -> getAdapter() 
-> select() 
-> from(array('u' => "usuarios"), array("nome" => "u.nome")) 
-> join(array('ta' => 'tex_turmas_alunos'), "ta.ativo = 'sim' AND ud.id = ta.id_aluno", null) 
-> join(array('te' => 'tex_testes'), "te.acertou = 'sim'", array('te.id_texto', 'te.id_usuario')) 
-> join(array('t' => 'tex_textos'), 'te.id_texto = t.id', array('t.titulo')) 
-> join(array('p' => 'publicacoes'), 'p.id_turma = ta.id_turma', null) 
-> where('ta.id_turma = '10') 
-> group(array('te.id_usuario', 't.id')) 
-> order(array('u.nome', 't.titulo')); 

return $this ->getAdapter()->fetchAll ($select); 

2:

$sqlString = 
    "SELECT te.id_usuario, u.nome, te.id_texto, t.titulo 
    FROM usuarios u, tex_turmas_alunos ta, tex_testes te, tex_textos t, publicacoes p 
    WHERE te.id_usuario=u.id 
     and u.id=ta.id_aluno and ta.id_turma= ? 
     and te.id_texto=t.id 
     and te.acertou = 'sim' 
     and ta.ativo='sim' 
     and te.id_texto=p.id_texto and p.id_turma=ta.id_turma 
    GROUP BY te.id_usuario, t.id 
    ORDER BY u.nome, t.titulo"; 
    $sql = $this->getAdapter()->query($sqlString, '10'); 

所述第一查詢的結果是:

SELECT `u`.`nome`, `te`.`id_texto`, `te`.`id_usuario`, `t`.`titulo` FROM `usuarios` AS `u` INNER JOIN `tex_turmas_alunos` AS `ta` ON ta.ativo = 'sim' AND ta.id_aluno = u.id INNER JOIN `tex_testes` AS `te` ON te.acertou = 'sim' INNER JOIN `tex_textos` AS `t` ON te.id_texto = t.id INNER JOIN `publicacoes` AS `p` ON p.id_turma = ta.id_turma WHERE (ta.id_turma = '11') GROUP BY `te`.`id_usuario`, `t`.`id` ORDER BY `u`.`nome` ASC, `t`.`titulo` ASC 

此結果不正確的返回。我的查詢有什麼問題?

- 錯誤的結果是這樣的:

nome     id_texto id_usuario titulo 
Another person   182  116  t2 
Another person   183  18  t3 
Another person   183  14  t3 
Another person   183  24  t3 
Another person   183  33  t3 
Another person   183  19  t3 
Another person   183  10  t3 

,我希望得到的結果:

id_usuario  nome  id_texto  titulo 
    108  Person 1  131  Text A 
    108  Person 1  132  Text B 
    108  Person 1  166  Text C 
    108  Person 1  304  Text D 

你懂的性差異?他們是兩個完全不同的結果。

謝謝

+0

您是否收到任何返回的錯誤?也許活躍他們? –

+0

在第一個查詢中,沒有錯誤,但不顯示相同的結果。在第二個,我有這個錯誤:PHP可捕捉的致命錯誤:Zend_Db_Statement_Pdo類的對象無法轉換爲字符串 – user3319937

+0

你能提供第一個查詢的結果和預期的結果嗎? –

回答

0

這是我的固定功能。很棒。

public function testesCorretos($id_turma){ 

     $sqlString = 
       "SELECT te.id_usuario, u.nome, u.matricula, te.id_texto, t.titulo 
       FROM usuarios u, tex_turmas_alunos ta, tex_testes te, tex_textos t, publicacoes p 
       WHERE te.id_usuario=u.id 
        and u.id=ta.id_aluno 
        and te.id_texto=t.id 
        and te.acertou = 'sim' 
        and ta.ativo='sim' 
        and te.id_texto=p.id_texto 
        and p.id_turma=ta.id_turma 
        and ta.id_turma= ? 
       GROUP BY te.id_usuario, t.id 
       ORDER BY u.nome, t.titulo"; 

     $sql = $this->getAdapter()->query($sqlString, $id_turma); 

     while($rows = $sql->fetchAll()){   
      for($i =0; $i <= count($rows); $i++){ 
       $row[] = array(
         'id' => $rows[$i]['id_usuario'], 
         'nome' => $rows[$i]['nome'], 
         'matricula' => $rows[$i]['matricula'], 
         'id_texto' => $rows[$i]['id_texto'], 
         'titulo' => $rows[$i]['titulo'] 
       ); 
      } 
     } 

     return $row; 

    }