Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF][ZendFramework]Zapytanie do MySQL - nawiasy
Kemil_neo
post 6.03.2013, 15:17:11
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.03.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 6.03.2013, 15:23:15
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dawno się tym nie bawiłęm, ale pamiętam że na stronie zenda w dokumentacji było pokazane jak zrobić to co chcesz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 6.03.2013, 19:06:31
Post #3





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Przykład #20
http://framework.zend.com/manual/1.12/en/zend.db.select.html

Nie ma to jak czytać dokumentację smile.gif


--------------------
Go to the top of the page
+Quote Post
lipek3
post 6.03.2013, 21:24:43
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 4
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


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);



Go to the top of the page
+Quote Post
Kemil_neo
post 7.03.2013, 09:01:29
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.03.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:27