![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Męczę się z wywołaniem podwójnego select'a w Zendzie. Przykładowo chciałbym wywołać zapytanie:
Próbowałem na wiele sposób, ale nie wychodzi mi nic tylko błędy. Przykładowo próbowałem w ten sposób:
Strona zwróciła błąd:
Gdzie linijka 18 to:
Czy wina stoi tutaj po Zend_Db_Table_Abstract ? Czy muszę użyć tutaj innej klasy? Przy użyciu Zend_DB_Adapter_Abstract z kolei wyświetla mi się błąd:
Z góry dziękuję za pomoc. Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie query, tylko fetchAll w celu pobrania wszystkich rekordów.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Próbowałem robić tak wcześniej:
Kod $rows = $this->fetchAll($sql); ale wyskakiwał wtedy błąd: Kod Message: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) Niżej cała zawartość pliku application/models/TagWeights.php. dodam, że tabela 'pcms_tag_weights' jest widokiem w bazie danych. Kod <?php class Application_Model_TagWeights extends Zend_Db_Table_Abstract { protected $_name = 'pcms_tag_weights'; protected $_primary = 'title'; public function getTagWeights(){ $sql = "SELECT `pcms_tag_weights` . * FROM ( SELECT `pcms_tag_weights`.`title` , `pcms_tag_weights`.`weight` FROM `pcms_tag_weights` ORDER BY `pcms_tag_weights`.`weight` DESC LIMIT 0 , 5 ) `pcms_tag_weights` ORDER BY `pcms_tag_weights`.`title` ASC "; $sql2 = 'SELECT `pcms_tag_weights`.`title` , `pcms_tag_weights`.`weight` FROM `pcms_tag_weights` ORDER BY `pcms_tag_weights`.`weight` DESC LIMIT 0 , 5'; $rows = $this->fetchAll($sql); print_r( $rows ); exit; $select = $this->select(); $select->from($this->_name, array($this->_name.".title", $this->_name.".weight")) ->order('weight DESC') ->limit(10,0); $rows = $this->fetchAll($select); return $rows; } } Gdy wykonuje w phpMyAdmin kod ze zmiennej $sql to zwraca mi wynik bez zarzutów. Ten post edytował CzarnyGsm 6.11.2011, 12:05:57 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Tylko po co te podzapytania, przecież ten sam efekt można uzyskać jednym zapytaniem:
Ten post edytował mortus 6.11.2011, 12:28:33 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Strasznie dziwne rzeczy robisz o.O
Co to ma robic wg Ciebie?
Stawiam, że tutaj masz błąd: $this->_name powinno być w apostrofach. Poza tym jeśli pobierasz z tabeli, którą zadeklarowałeś w protected $_name, to nie musisz używać $this->_name , bo Zend będzie wiedział, że od nosisz się do tej tabeli. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Pierwszy fragment, który przytoczyłeś to próba wykonania zapytania i sprawdzenie, czy próba się powiodła.
Jakim cudem może mieć błąd w drugim fragmencie, skoro exit zatrzymuje skrypt wcześniej? @CzarnyGsm: Wpisz komunikat błędu w wyszukiwarce Google, a otrzymasz parę informacji na ten temat. Ten post edytował mortus 6.11.2011, 12:42:33 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ups, nie przejrzałem dokładnie kopiując zawartość pliku. Niżej kod wyczyszczony bez niepotrzebnego kodu. Dziękuję bardzo za próbę pomocy.
Oczywiście błąd nadal ten sam, czyli: Message: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) ~mortus Twój kod wyświetli całkiem inny wynik niż kod zawarty w zmiennej $sql. Wynik będzie uporządkowany tylko według title.
Struktura bazy danych
~mortus co do google, to pierwsze co zrobiłem to sprawdziłem w wyszukiwarce. Jedna osoba miała ten sam komunikat, ale był on spowodowany błędnym zapytaniem. Zapytanie sprawdziłem w phpMyAdmin i działa bez problemów, tutaj zaś wypluwa błąd. Z góry dziękuję za pomoc. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A "pcms_tag_weights" to jest perspektywa, czy nazwa tabeli? SQLite nie znam, tylko MySQL.
Bo w zmiennej protected $_name ma być nazwa tabeli, z której pobierasz dane. Ten post edytował IceManSpy 6.11.2011, 17:52:41 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak, pcms_tag_weight to jest nazwa tabeli, a dokładnie tabeli typu widok.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:33 |