Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF][Zend db_select]Ranking rekordów
Forum PHP.pl > Forum > PHP > Frameworki
Janusz1200
Witam, wie ktoś może, jak napisać coś takiego w Zendzie:

SELECT @pos:=@pos+1, id, table_pkt FROM `user`, (select @pos:=0) p WHERE league_id=2 order by points desc

(chodzi o dodatkową kolumnę, która numeruje rekordy)

Próbowałem z joinCross:
$select->joinCross('(select @pos:=0) p');

ale coś nie idzie....


Pozdrawiam

Janusz
viking
Opakować w Zend_Db_Expr. Przykład http://php.r3dcode.com/files/Magento/1.6/1...lper/Mysql4.php
Janusz1200
W przykładzie, który podałeś, robią 2 query (inicjowanie zmiennej i użycie zmiennej w selekcie)

$adapter->query("SET @pos = 0 .... ");
95
96 $adapter->query($sql);
97

nie wiem, czy to jest bezpieczne w sensie transakcyjności.
Ja zrobiłem w jednym select, tyle, że to jest nie tak eleganckie, jakbym chciał.

$sql= "SELECT @pos:=@pos+1 position, id
FROM section_user, (select @pos:=0) p
WHERE league_id=? order by table_pkt desc,
(table_pktwin - table_pktlost) DESC, table_w DESC,
table_d DESC,table_l

return $this->getAdapter()->fetchAll($sql, $leagueId);
Pilsener
A jak byś chciał?
  1. $select = $this->select();
  2. $select->from($this->_name,array($this->_name.'.*','test'=>new Zend_Db_Expr('now()')));


Zamiast "now()" wstaw to, co potrzebujesz, czyli te zmienne.
Janusz1200
Cytat(Pilsener @ 30.03.2012, 09:58:47 ) *
A jak byś chciał?
  1. $select = $this->select();
  2. $select->from($this->_name,array($this->_name.'.*','test'=>new Zend_Db_Expr('now()')));


Zamiast "now()" wstaw to, co potrzebujesz, czyli te zmienne.

Dzięki. Faktycznie w tym, co napisałeś, jest dodawanie nowej kolumny ( @pos:=@pos+1 ), jak w podanym przez Vikinga przykładzie. Chodzi teraz o zainicjowanie zmiennej @pos zerem. Można to zrobić w dwóch zapytaniach,
jak w podanym przez Vikinga przykładzie, ale to budzi moje obawy, można próbować w jednym zapytaniu.
I właśnie problem leży w tym, że żeby w jednym zapytaniu ustawić wartość początkową zmiennej @pos
na 0, trzeba dać from (jak dodatkowa tabela), w sql to wygląda tak:

FROM section_user, (select @pos:=0) p

natomiast w Zend, żeby to grało, to trzeba tę tabelę dostawić jakoś, może tak:

$select->joinCross('(select @pos:=0) p');

ale to nie idzie. Faktycznie, może w tym joinCross trzeba by użyć Zend_Db_Expr,
może spróbuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.