Witam, czy ktoś wie, jak zrobić zagnieżdżone zapytanie takie jak "SELECT * FROM (SELECT * FROM table
LIMIT 0,12) table
ORDER BY Rand()" , używając do tego Zend_Db_Table ?
- Rejestracja:około 11 lat
- Ostatnio:ponad 10 lat
- Postów:29

- Rejestracja:ponad 18 lat
- Ostatnio:około miesiąc
- Lokalizacja:Rzeszów
- Rejestracja:około 11 lat
- Ostatnio:ponad 10 lat
- Postów:29
Próbowałem coś zrobić podobnego jak tutaj: http://zend-framework-community.634137.n4.nabble.com/Support-Zend-Db-Select-sub-selects-td674928.html ,ale wywala mi błędy.
Mój kod:
$subselect = $this->select()
->from(array('table'))
->limit(0,12);
$select = $this->select()
->from(
array('table'),
array('table', new Zend_Db_Expr($subselect))
)
->order(new Zend_Db_Expr('RAND()'));
$db = $this->fetchAll($select);
Wyskakuje błąd :
Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `table`.* FROM `table` LIMIT 2147483647 OFFSET 12 FROM `table` ORDER BY R' at line 1
Coś mam nie teges w składni, ale nie mogę dojść co. Proszę o pomoc. Z góry bardzo dziękuję.
- Rejestracja:około 11 lat
- Ostatnio:ponad 9 lat
- Postów:3
$subselect = $this->select()->from('table')->limit(12, 0);
$select = $this->select()->from(new Zend_Db_Expr(" (".$subselect.") ") )->order(new Zend_Db_Expr('RAND()'));
Zend_db_select posiada metodę __toString() która wyświetli wygenerowane zapytanie sql -> zakomentuj $db = $this->fetchAll($select); i wyświetl w widoku zapytanie to będziesz wiedział co się dzieje
- Rejestracja:około 11 lat
- Ostatnio:ponad 10 lat
- Postów:29
Użyłem tej funkcji, doprowadziłem zapytanie do poprawnego zapytanie, ale mam jeszcze jeden problem. Nie mogę pozbyć się kropki w zapytaniu. Wie ktoś może jak to rozwiązać?
SELECT `table`.`table1` FROM (SELECT `table`.* FROM `table` LIMIT 2 OFFSET 12)<nieszczęśnakropka>.</nieszczęśnakropka>`table` ORDER BY RAND()
Kod wygląda tak:
$subselect = $this->select()
->from('table')
->limit(2,12);
$select = $this->select()
->from(
'table',array('table1'),$subselect
)
->order(new Zend_Db_Expr('RAND()'));
- Rejestracja:około 11 lat
- Ostatnio:ponad 9 lat
- Postów:3
$subselect = $this->select()->from('table')->limit(2,12);
$select = $this->select()->from($subselect, array('table1'))->order(new Zend_Db_Expr('RAND()'));
efekt:
SELECT `t`.`table1` FROM (SELECT `table`.* FROM `table` LIMIT 2 OFFSET 12) AS `t` ORDER BY RAND()
pierwszym parametrem metody from jest nazwa tabeli z której pobierasz dane -> można tam wstawić inne zapytanie
- Rejestracja:około 11 lat
- Ostatnio:ponad 10 lat
- Postów:29
Problem jest taki, że zawsze kiedy subselect jest w pierwszej kolejności, przed tablicą: from($subselect, array('table1'))
to wyskakuje błąd:Warning: Select query cannot join with another table in ...\Zend\ZendServer\data\libraries\Zend_Framework_1\1.12.3\library\Zend\Db\Select.php on line 1350
- Rejestracja:około 11 lat
- Ostatnio:ponad 9 lat
- Postów:3
spróbuj dodać:
$select->setIntegrityCheck(false);
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.