2011-12-30 18 views
8

Próbuję pobrać wiersze, które są w tablicy liczb całkowitych, które używam Zend Framework 1.11.Jak wykonać klauzule MySQL IN za pomocą Zend DB?

$this->dbSelect 
     ->from($table_prefix . 'product_link') 
     ->joinLeft($table_prefix . 'product_link_name', $table_prefix . 'product_link.product_link_name_ref_id = ' . $table_prefix . 'product_link_name.product_link_name_id') 
     ->where('product_ref_id IN (?)', implode(', ', $product_ids)); 

Kiedy zastosować metodę $this->dbSelect__toString(), mam

SELECT `phc_distrib_product_link`.*, 
    `phc_distrib_product_link_name`.* 
FROM `phc_distrib_product_link` 
LEFT JOIN `phc_distrib_product_link_name` 
ON phc_distrib_product_link.product_link_name_ref_id = phc_distrib_product_link_name.product_link_name_id 
WHERE (product_ref_id IN ('10, 12')) 

ta zwraca tylko wiersze spełniające warunek gdzie product_ref_id = 10. Jak mogę uzyskać klauzula być

product_ref_id IN ('10', '12') 

lub

product_ref_id IN (10, 12) 

używając instrukcji przygotowanych przez Zend DB, więc mogę pobrać wszystkie wiersze zawarte w tablicy identyfikatorów produktu?

Odpowiedz

15

Nie implozji tablicę, po prostu przekazać go:

->where('product_ref_id IN (?)', $product_ids); 
+0

Więc dobrze, dziękuję! Odpowiedziałeś tak szybko, że nie mogę jeszcze przyjąć odpowiedzi, ale zrobię to, kiedy mi pozwolono! – danronmoon

1

Warto wspomnieć, że istnieją 2 sposoby użycia gdzie w clausule w Zend_Db_Select:

  1. możemy przekazać tablicę jako drugi parametr:

    $select->where("column_value IN (?)", $array_of_values)

  2. Albo możemy sim warstwa implozji tablicę uzyskać wartości jako ciąg:

    $select->where("column_value IN (" . implode(',', $array_of_values) . ")")

+0

Druga metoda nie jest wcale bezpieczna, jeśli '$ array_of_values' nie jest tablicą liczb całkowitych! Wyobraź sobie, że używasz tego w delete(), podczas gdy '$ array_of_values' zawiera: array (" column_value "). Spowoduje to: 'DELETE FROM table_name WHERE wartość_elementu IN (column_value)' które usunie wszystko! –

-1
->where('country_id IN (?)', $country_ids); 
Powiązane problemy