2012-11-18 11 views
6

mam zapytaniu warunku poniżej (bez wyboru, z itp)CodeIgniter DB Zaptanie gdzie i i .. i jak

$this->db->where('show_year', $yyyy); 
$this->db->or_where('idn', $idn); 
$this->db->or_like('post_slug', $idn); 

stanowiącym

SELECT * FROM (`nyb_articles`) 
WHERE `show_year` = '2009' 
OR `idn` = 'the' 
AND `post_slug` LIKE '%the%' 

jednak szukam mają być bardziej jak

SELECT * FROM (`nyb_articles`) 
WHERE `show_year` = '2009' 
AND (`idn` = 'the' OR `post_slug` LIKE '%the%') 

mój problem jest nie jestem pewien, czy aktywny rekord CI obsługuje tego pojęcia, a jeśli tak, to w jaki sposób Zajmuję się tym, ponieważ nie mogę znaleźć nigdzie tego w dokumentach. Niezależnie od tego, jak zmieniam ustawienia, nie mogę nawet przybić czegoś podobnego. Czy ktoś ma jakieś pomysły? Wolałbym trzymać się z dala od surowego zapytania, jeśli w ogóle możliwe, ale jeśli muszę przygotować i zrobić to w ten sposób, to wolałbym nie.

+0

myślę, że odpowiedź może pomóc, http://stackoverflow.com/questions/11937867/nested-where-clauses-codeigniter-mysql- query/11940789 # 11940789 po prostu wyrzuć '' (...) 'część wewnątrz jednego' $ this-> db-> where() 'wywołaj jako ciąg znaków (z'() 's) – complex857

+0

Myślę, że możesz być na do czegoś z tym. Miał nadzieję, że istnieje sposób na to, aby pozostał on podzielony na części, aby ułatwić zmianę w czasie, jako dopracowany, i spłynął na linię, która buduje całe zapytanie w całości przez przypadkowe warunki, ale jeśli to jedyny przypadek Przyjmuję to, dobre znajdowanie – chris

Odpowiedz

2

Czy próbowałeś tego?

SELECT * FROM (`nyb_articles`) 
WHERE `show_year` = '2009' AND `idn` = 'the' 
OR `show_year`='2009' AND `post_slug` LIKE '%the%' 

myślę dodaje daje wyraz powyżej:

$this->db->select(...)->from(...)-> 
where("show_year","2009")->where("idn","the")-> 
or_where("show_year","2009")->like("post_slug","%the%") 
+1

Mieszanie 'ORAZ' i' OR' bez nawiasów jest prawdopodobnie złym pomysłem z punktu widzenia czytelności/konserwacji, nawet jeśli dystrybucja działa teraz zgodnie z zamierzeniem. Lepiej graj w nią bezpiecznie i używaj klauzul [DNF] (http://en.wikipedia.org/wiki/Disjunctive_normal_form) lub [CNF] (http://en.wikipedia.org/wiki/Conjunctive_normal_form). – complex857

+0

Wiem, ale z CI AR nie można nawiasy. To tylko (n brzydkie) obejście. Sprawdź preferencje operatora w mysql: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html - mysql wykona evalutes najpierw 'AND' po' OR'. – uzsolt

Powiązane problemy