Zend Framework Mysql WHERE IN предложение
Используя Zend Framework, я использовал запрос с предложением IN, это мой запрос
$select->where('p.brandid IN (?)',$details[brand]);
В приведенном выше запросе $details[brand] имеет значение, подобное этому массиву (1,2,3) .
На самом деле запрос должен возвращать все значения, которые все связаны с этим массивом (1,2,3) .
Но мой запрос возвращает результат, относящийся к первому значению, представленному в приведенном выше массиве (1,2,3).ie 1, один другой 2,3 не рассматривается.
когда я печатаю этот запрос, он показывает, как это
[where] => Array
(
[0] => (p.brandid IN ('1,2,3'))
)
Может кто-нибудь показать мне, что я сделал ошибку или решение для этого..
3 ответа
Это потому, что ваш запрос формируется неправильно p.brandid IN ('1,2,3')
вместо p.brandid IN (1,2,3)
вы можете попробовать использовать функцию имплода в php
$select->where('p.brandid IN (?)',implode(",",$details[brand]));
Просто небольшое исследование, потому что у меня та же проблема.
Я не уверен, какую версию 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
,
Вы можете изменить это в соответствии с Zend Framwork
locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>0
Просто используйте
$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;