Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF][ZendFramework]Zapytanie do MySQL - nawiasy
Forum PHP.pl > Forum > PHP > Frameworki
Kemil_neo
Witam

Ma problem z konstrukcją zapytania do bazy MySql za pomocą Zend Framework.

Mianowicie mam coś takiego:
  1. $lista = $ob->pobierzDlaKategorii($kat['id_kat']);
  2.  
  3. $db = Zend_Registry::get('db');
  4. $select = $db->select();
  5. $select->from(array('p' => 'parametrywartosci'));
  6.  
  7. foreach($lista as $row){
  8. $select->orWhere('id_param = ' . $row['id_parametr']);
  9. }
  10.  
  11. $select->where('id_produkt = ' . $id);
  12. //die($select->__toString());
  13. return $db->fetchAll($select);


i ten kod dla przykładowych danych generuje zapytanie:

SELECT `p`.* FROM `parametrywartosci` AS `p` WHERE (id_param = 3) OR (id_param = 1) AND (id_produkt = 12)

Niestety to zapytanie nie zwraca oczekiwanego wyniku, jednak wystarczy mała modyfikacja tzn.:
SELECT `p`.* FROM `parametrywartosci` AS `p` WHERE ( (id_param = 3) OR (id_param = 1) ) AND (id_produkt = 12)

I tu moje pytanie jak stworzyć te nawiasy? Czy da się to jakoś zrobić za pomocą Zenda czy trzeba operować bezpośrednio na stringu ?

Z góry dzięki za pomoc
nospor
Dawno się tym nie bawiłęm, ale pamiętam że na stronie zenda w dokumentacji było pokazane jak zrobić to co chcesz.
viking
Przykład #20
http://framework.zend.com/manual/1.12/en/zend.db.select.html

Nie ma to jak czytać dokumentację smile.gif
lipek3
Możesz zrobić coś takiego

  1. $lista = $ob->pobierzDlaKategorii($kat['id_kat']);
  2.  
  3. $db = Zend_Registry::get('db');
  4. $select = $db->select();
  5. $selectOr = $db->select();
  6. $select->from(array('p' => 'parametrywartosci'));
  7.  
  8. foreach($lista as $row){
  9. $selectOr->orWhere('id_param = ?',$row['id_parametr']);
  10. }
  11.  
  12. $select->where('id_produkt = ' . $id)->where(implode(' ',$selectOr->getPart(Zend_Db_Select::WHERE)));
  13. //die($select->__toString());
  14. return $db->fetchAll($select);



Kemil_neo
Dzięki za pomoc!! Zrobiłem tak:
  1. $lista = $ob->pobierzDlaKategorii($kat['id_kat']);
  2.  
  3. $db = Zend_Registry::get('db');
  4. $select = $db->select();
  5. $select->from(array('p' => 'parametrywartosci'));
  6. $tablica=array();
  7.  
  8. foreach($lista as $row){
  9. $tablica[] = $row['id_parametr'];
  10. }
  11. $select->where('id_param IN (?)', $tablica);
  12. $select->where('id_produkt = ' . $id);
  13.  
  14. return $db->fetchAll($select);


Wszystko działa elegancko

Temat do zamknięcia
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.