2015-12-23 8 views
0

У меня есть следующая ситуация: я создаю страницу поиска. На странице поиска заполняются выборки выбора запросов MySQL. Поэтому эти флажки обозначаются как name="name[]". Чтобы показать вам, что я делаю, я буду включать в себя картину:mysql select query using imploded values ​​

Picture

Так что, если бы я должен был проверить 1 Availability - как неделя - запрос будет работать отлично. Но если я выберу 2 доступности, только модели с BOTH availabites показывают вместо каждой модели, имеющей одну из двух возможностей. Вот мой код:

HTML:

$return2 = $tafel->query("SELECT DISTINCT whenpossible FROM models where arttype LIKE 'Model%'"); 
    while($row1 = $return2->fetch(PDO::FETCH_ASSOC)){ 
    $whenp = $row1['whenpossible']; 
    <input type="checkbox" name="when[]" value="<?= $whenp ?>"><span class="box2"><?= $whenp ?></span> 

PHP:

if (!empty($_POST['gender'])) { 
$genders = $_POST['gender']; 
$gender = implode(",",$genders); 
} else { 
$gender = "%"; 
} 

$select = $tafel->prepare("SELECT * FROM models 
    WHERE whenpossible LIKE :when"); 
$select->bindParam(':when', $when, PDO::PARAM_STR); 
$select->execute(); 

Кто-нибудь есть идея, как это исправить, так что я могу выбрать 1 или несколько вариантов?

Спасибо всем очень!

+2

Возможный дубликат [Динамические запросы с PHP PDO] (http://stackoverflow.com/questions/4538960/dynamic-queries-with-php-pdo) – Sean

+0

Основная проблема заключается в том, что если я использую оба Доступности, я получаю нет результата, а не каждой модели, которая имеет одну из двух возможностей. –

ответ

0

Для тех, кто заинтересован или сталкиваются с той же проблемой, вот ответ:

В случае IN или FIND_IN_SET Арен Не работай для вас, вы можете попробовать это.

Implode ваше значение следующим образом:

if (!empty($_POST['VALUE'])) { 
$value = $_POST['VALUE']; 
$valueimplode = implode('|', $value) 
} else { 
$value = 'somethingelse' 
} 

| очень важно для функции SQL. Он действует как OR. SQL, как следует:

$query = $db->prepare("SELECT * FROM table WHERE column REGEXP(:valueimplode)"); 
$query->bindParam(':value', $valueimplode, PDO::PARAM_STR); 
$query->execute(); 

Вы найдете все результаты, которые вам нужны.

Если у вас есть пустое значение, то вы можете сделать это:

if (!empty($_POST['VALUE'])) { 
$value = $_POST['VALUE']; 
$valueimplode = implode('|', $value) 
} else { 
$value = '%' <-- Wildcard, means EVERYTHING!!! 
} 

Тогда SQL так:

$query = $db->prepare("SELECT * FROM table WHERE (column REGEXP(:valueimplode) OR column LIKE :value)"); 
$query->bindParam(':value', $valueimplode, PDO::PARAM_STR); 
$query->execute(); 

% не работает с REGEXP так пойдет НРАВИТСЯ, который затем выберет все в этом столбце. Смысл, все это приведет.

Надеюсь, у кого-то есть хорошее применение!

0

В коде вы создаете неверную команду SQL.

Для примера SQL является

SELECT * FROM table WHERE field LIKE '%value1,%value2' 

Это неверный код. Правильный код может быть

SELECT * FROM table WHERE field LIKE '%value1' OR field LIKE '%value2' 

Вы должны переписать код для построения правильного SQL

+0

Хотелось бы, чтобы я мог это сделать, но значения были сгенерированы sql. Поэтому я никогда не знаю, сколько будет значений. –