2013-07-31 1 views
0

У меня есть две таблицы MySQL. Это первый [продукты] (ПЕРВИЧНЫЙ = Id):SQL-запрос для выбора отдельных строк из левой таблицы после внутреннего соединения в правой таблице

[id] | title | description 

, и это вторые [размеры] (ПЕРВИЧНЫЙ = идентификатор & размера):

[id] | [size] 

size может иметь только значения из [1,2,3,4,5,6] ,

У меня есть массив PHP, который имеет значения размера. Я перекроить его разделенных запятыми значений строки следующим образом:

$size_list = implode(",", $sizes); 

Для тех, кто не знаком с PHP, приведенный выше код будет генерировать строку, как это: «1,4,5», а затем запросить база данных:

$query = "SELECT t1.id,t1.title,t1.description,t2.size FROM products t1 INNER JOIN sizes t2 ON t1.id=t2.id WHERE size IN(".$size_list .")"; 

Но этот запрос реплицирует продукты для каждого размера, который они имеют в таблице размеров. Я хочу:

Возврат записей из таблицы товаров, которые имеют по крайней мере один доступный размер в таблице размеров, без дублировать

и конечно

хотите, чтобы эти размеры в переменной, чтобы показать клиент


Например:

продукты:

1 | product1 | description1 
2 | product2 | description2 
3 | product3 | description3 
4 | product4 | description4 

Размеры:

1 | 1 
1 | 2 
1 | 4 
1 | 5 
2 | 1 
2 | 5 

Учитывая $sizes_list="1,2", что я хочу, как результат:

1 | product1 | description1 | 1,2,4,5 
2 | product2 | description2 | 1,5 

ответ

3

Ваш запрос должен быть как:

$query = " 
    select t1.id, t1.title, t1.description, group_concat(t2.size SEPARATOR ",") as sizes 
    from products as t1 
     inner join sizes as t2 on t1.id=t2.id 
    where t1.id in (select t3.id from sizes as t3 where t3.size in (".$size_list .") 
    group by t1.id, t1.title, t1.description 
" 

Немного объяснения. Когда вы присоединяетесь к двум таблицам, вы получаете все строки из таблицы sizes для всех id из таблицы products, поэтому id = 1 соединен с четырьмя записями и id = 2, соединенными с двумя записями. Таким образом, вы должны объединить эти числа в одну запись.

+0

Да, сменил ответ –

+0

OMG, я думаю, что в этом вопросе что-то не так, о чем я не упоминал. Я думаю, что «он не перечисляет все размеры для продукта. Он имеет размеры, которые находятся в $ size_list'. я ошибаюсь? – Trix

+0

wait a sec, я должен проверить –

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

  • Нет связанных вопросов^_^