Как сделать предложения MySQL IN, используя Zend DB? - PullRequest
8 голосов
/ 30 декабря 2011

Я пытаюсь получить строки, которые находятся в массиве целых чисел, которые у меня есть, используя Zend Framework 1.11.

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

Когда я использую __toString() метод $this->dbSelect, я получаю

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

Возвращает только те строки, которые удовлетворяют условию, где product_ref_id = 10. Как я могу получить предложение IN, которое будет

product_ref_id IN ('10', '12')

или

product_ref_id IN (10, 12)

с использованием подготовленных операторов Zend DB, чтобы я мог получить все строки, содержащиеся в массиве идентификатора продукта?

Ответы [ 3 ]

16 голосов
/ 30 декабря 2011

Не взламывать массив, просто передать его:

->where('product_ref_id IN (?)', $product_ids);
1 голос
/ 31 декабря 2011

Стоит отметить, что в Zend_Db_Select есть 2 способа использования предложения WHERE IN:

  1. Мы можем передать массив в качестве второго параметра:

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

  2. Или мы можем просто развернуть массив, чтобы получить значения в виде строки:

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

0 голосов
/ 07 августа 2014
->where('country_id IN (?)', $country_ids);
...