Forum > Övriga serverspråk > PHP
Jag har ett problem med en join i en zend-sqlfråga. Så här ser SQL frågan ut.
public function getNewest($page, $pageSize)
{
$query = $this->select();
$query ->from(array('i' => 'image'), array('i.id','i.owner_id','i.filename'));
$query ->joinLeft(array('c' => 'image_comment'),'i.id = c.user_id', array('number_of_comments' =>'COUNT(*)'));
$query ->setIntegrityCheck(false);
//$query ->order('i.id desc');
//$query ->limit($pageSize,(($page-1)*$pageSize));
$result = $this->fetchAll($query);
Zend_Debug::dump($result); die();
if(count($result)) {
return $result;
}
return null;
}
När jag debugar ut resultatet får jag detta:
object(Zend_Db_Table_Rowset)#90 (10) {
["_data":protected] => array(1) {
[0] => array(4) {
["id"] => int(1)
["owner_id"] => int(3)
["filename"] => string(21) "/galleri/IMG_4090.jpg"
["number_of_comments"] => int(6)
}
}
Min databas struktur ser ut så här:
image 
image_comment 
Det jag vill skall hända är att alla bilderna skall visas och att man ser hur många kommentarer varje bild har. Men det som händer är att endast en bild visas och den får fel antal kommentarer på sig. Så något är fel. Kommenterar jag bort join raden så visas alla bilderna.
Säg till om ni behöver mer kod eller se något annat.
Jag använder mig utav Zend Framework.
| Skriv utDet löste tydligen sig igår när Andreas hjälpte mig eller rättare sagt min kompis som stog för snacket via skype igår.
Andreas kanske kommer ihåg vad som var felet för jag hängde inte med så mycket igår.
Lite mer grejande idag så fick vi till det på ett bättre sätt, slutgiltliga lösningen blev alltså denna SQL för den som är intresserad:
public function getLatest($page, $pageSize)
{
$query = $this->select();
$query ->from(array('i' => $this->_name), array('i.id','i.owner_id','i.filename'));
$query ->joinLeft(array('c' => 'image_comment'),'i.id = c.image_id', array('number_of_comments' =>'COUNT(c.id)'));
$query ->group('i.id');
$query ->setIntegrityCheck(false);
$query ->order('i.id desc');
$query ->limit($pageSize,(($page-1)*$pageSize));
$result = $this->fetchAll($query);
Zend_Debug::dump($result); die();
if(count($result)) {
return $result;
}
return null;
}
Varför inte göra vanliga queries istället? Eller klarar inte ZF det?
Själv använder jag Kohana och ren sql med parametrar istället.
Då kan man testa sina sqlfrågor i en databasklient som navicat först.
Jag vet inte om ZF klarar ren SQL, jag har aldrig testat det. Men att skriva som jag gjort tycker jag fungerar utmärkt. Man behöver ju som sagt inte vara någon raketforskare för att kunna översätta den koden till ren SQL och testa i tex phpmyadmin.