Предложение Zend Framework Mysql WHERE IN

Используя zend framework, я использовал запрос с предложением IN, это мой запрос

       $select->where('p.brandid  IN (?)',$details[brand]);

в приведенном выше запросе $details[brand] имеет значение, подобное этому array(1,2,3) .

На самом деле запрос должен возвращать все значения, которые относятся к этому массиву (1,2,3).

Но мой запрос возвращает результат, связанный с первым значением, присутствующим в приведенном выше массиве (1,2,3). Т.е. 1 отдельно, другие 2,3 не рассматриваются.

когда я печатаю этот запрос, он выглядит так

             [where] => Array
               (
                [0] => (p.brandid  IN ('1,2,3'))
              )

Может ли кто-нибудь показать мне, какую ошибку я сделал или решение для этого.


person chandru_cp    schedule 20.07.2012    source источник


Ответы (4)


Это связано с тем, что ваш запрос формируется неправильно p.brandid IN ('1,2,3') вместо p.brandid IN (1,2,3) вы можете попробовать использовать функцию implode в php

$select->where('p.brandid  IN (?)',implode(",",$details[brand]));
person Omesh    schedule 20.07.2012

Просто небольшое исследование, потому что у меня такая же проблема.

Я не уверен, какую версию Zend вы используете. Но решение, предоставленное @Omesh, не работает с моей версией 1.12.

В моем случае это абсолютно противоположное explode решение:

$select->where('p.brandid  IN (?)', explode(',',$details[brand]));

Вероятно, это зависит от типа $details['brand']. В моем случае у меня есть строка типа 555,666,777,877. Но даже если у вас есть массив там. Странно, если Zend принимает в вашем случае string (результат implode) и не принимает array. А в моем случае не принимает string, а принимает array.

person Alex    schedule 15.10.2015

Вы можете изменить это в соответствии с Zend framework

locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>0
person Madhivanan    schedule 20.07.2012

Просто используйте

$select->where->in('field_name', $your_simple_array);

Если вы раньше использовали функцию where() с какими-то критериями, например

$select->where(['field_name' => $value]);

просто используйте первый после него, например

$select->where(['field_name' => $value]);
$select->where->in('field_name', $your_simple_array);

Всегда помните, что where нужно использовать не как функцию where(), а как ключевое слово.

Это действительно и проверено мной в следующем контексте:

$select = $this->tableGateway->getSql()->select()->where(['field1' => $v1, 'field2' => $v2]);
$select->where->in('field_name', ['v1', 'v2', 'v3']);

То есть используя эти библиотеки в начале класса модели:

use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;
person mpoletto    schedule 19.07.2019