2016-01-10 7 views
1

У меня есть массив цвета и хочу, чтобы соответствовать цветовому ряду в MYSQL,PHP массива матч MYSQL строка

до тех пор, как спичка цветой строки одного из цветов в массиве, а затем принять его.

следующий $colorArray должен соответствовать идентификатору 2 & 3, потому что эти строки содержат желтой & синего

$colorArray = array('yellow','blue'); 

+------+---------+------------+ 
| id | product | color  | 
+------+---------+------------+ 
| 1 | tShirt | red,green | 
| 2 | jeans | yellow,red | 
| 3 | shorts | black,blue | 
+------+---------+------------+ 

Я просто хочу синтаксис MySQL SELECT, я знаю, что это можно сделать с помощью PHP array_intersect сделать некоторые фильтры, но я не хочу по каким-то причинам.

Так что это возможно?

+0

Какие поля 'цвет'? – genespos

+0

Да, это строка (varchar) – Taniel

+0

Я верю, что ответ Адель Бакне будет работать на вас. Просто измените '$ sql' часть из' $ sql = "DELETE FROM WHERE REGEXP '". $ ColorsStr. "'"; 'To' $ sql = "SELECT * FROM WHERE REGEXP '". $ colorsStr. "'"; ' –

ответ

0

Используйте FIND_IN_SET() в вашем запросе. Попробуйте это, дайте мне знать. Я надеюсь, что sloved ваша проблема ваш необходимый запрос

SELECT * FROM t3 WHERE FIND_IN_SET('yellow', colour) or FIND_IN_SET('blue', colour) 

код:

<?php 
$colorArray = array('yellow','blue','red'); 
$where1 ="FIND_IN_SET('$colorArray[0]', colour) "; 
$where=""; 
for($i=1;$i<sizeof($colorArray);$i++){ 
$color=$colorArray[$i]; 
$where .= " or FIND_IN_SET('$color', colour) "; 
} 
$sql="SELECT * FROM t3 WHERE $where1 $where"; 
//echo $sql;//SELECT * FROM t3 WHERE FIND_IN_SET('yellow', colour) or FIND_IN_SET('blue', colour) or FIND_IN_SET('red', colour) 
// try running this query 
?> 
+0

это работает @@ ", THANKS – Taniel

0

Попробуйте этот код:

$colorsStr = implode(',', $colorArray); // => 'yellow,blue' 
$sql = 'SELECT id FROM <your_table_name> WHERE color IN('.$colorsStr.')'; 
+0

это не работает. – Taniel

+0

Затем попробуйте следующее: '$ sql = 'SELECT id FROM WHERE color = \' '. $ ColorsStr.' \ '';' – Slam

+0

Протестировать юр себя не может, работа – devpro

0

Вы можете попробовать что-то вроде:

$colorArray = array('yellow','blue'); 
$colors = join(',',$colorArray); 
$sql = "SELECT '$colors' AS colors, 
     color, 
     CONCAT('(', REPLACE(color, ',', '(\\,|$)|'), '(\\,|$))') AS regex, 
     '$colors' REGEXP CONCAT('(', REPLACE(color, ',', '(\\,|$)|'), '(\\,|$))') AS intersect 
     FROM YourTableName 
     GROUP BY id HAVING intersect > 0"; 
+0

не работает тоже .. – Taniel

+0

@Taniel Я спросил вас, какое поле является цветом. Можете ли вы ответить, пожалуйста? – genespos

+0

Да, это строка (varchar) – Taniel

0
$colorArray = array('yellow','blue'); 
$colors = implode(",",$colorArray); 
$query = "SELECT color FROM TableName WHERE color = '.$colors.'"; 
+0

Можете ли попробовать эту юрскую я? – devpro

+0

U r инициализация переменной цвета и использование цветовой переменной – devpro

+0

спасибо, я попробовал, но это не то, что я хочу:) – Taniel

1

Я думаю, что вы испытываете проблемы в комбинируя in и Like %S%, так REGEXP может быть более эффективным, но вам нужно будет проверить его, например,

$colorsStr = implode('|', $colorArray); // => 'yellow|blue' 
$sql = "SELECT * FROM <your_table_name> WHERE REGEXP '" . $colorsStr . "'"; 
+1

OP хочет «SELECT» строк, а не 'DELETE' строк. –

+0

@ Adel Bachene спасибо, но я не знаком с REGEXP orz – Taniel

1

Легко:

<?php 
$color = array('yellow', 'red'); 
$query = ""; 
foreach($color as $c) 
    $query .= "color like '%".$c."%' or "; 
$sql = "SELECT * FROM <your_table_name> WHERE ".$query." 1=0"; 
?> 
+0

U получит OR в последней итерации – devpro

+0

И OP Нужно, чтобы это в mysql не хотело использовать php – devpro

+0

Окончательный запрос: SELECT * FROM WHERE color like '% red%' или color like '% yellow%' или 1 = 0 и не имеет проблем. – shozdeh

Смежные вопросы