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;
Другие вопросы по тегам