2014-01-13 3 views
1

Я пытаюсь объединить 4 таблицы, чтобы получить соответствующие данные для предметов одежды, что-то вроде этого, выбирая для каждого элемента ..Вложенные подзапросы с соединениями

Array(
[0] => array ([item] => 1, [article] => 10, [layer1] => 6, [layer2] => 8, [layer3] => 9, [layer4] => 10), 
[1] => array ([item] => 2, [article] => 5, [layer1] => 3, [layer2] => 4, [layer3] => 5, [layer4] => 0/null), 
[2] => array ([item] => 3, [article] => 7, [layer1] => 7, [layer2] => 0/null etc), 
[3] => array ([item] => 4, [article] => 1, [layer1] => 1, [layer2] => 2, [layer3] => 0/null etc)) 

Я не был уверен, как гнездо и присоединяться к этим таблицам для получения правильных данных, но все 4 таблицы (к сожалению) необходимы для хранения различных бит сортировки и предварительного просмотра данных, а самые дальнейшие таблицы - деревом (article_layers и layer), требующим нескольких соединений строк. Таблицы скелета показаны ниже.

items table 
item_id item_article item_name 
1   10    red dress 
2   5    green polo 
3   7    jeans 
4   1    black leather jacket 
5   10    black dress 

articles table 
article_id article_name 
1   jacket 
5   shirt 
7   pants 
10   dress 

article_layers table 
id article_id layer_id 
1  1   1 
2  1   2 
3  5   3 
4  5   4 
5  5   5 
6  7   7 
7  10   6 
8  10   8 
9  10   9 
10  10   10 

layers table 
layer_id layer_name  
1   jacket_right_sleeve 
2   jacket_left_sleeve 
3   shirt_right_sleeve 
4   shirt_left_sleeve 
5   shirt_torso 
6   dress_torso 
7   pants 
8   dress_left_sleeve 
9   dress_right_sleeve 
10   dress_skirt 

Я попытался

SELECT items.*, articles.*, article_layers.*, layers.*, 
    (SELECT * FROM layers where article_layers.layer_id = layers.layer_id) as layer1,   
FROM items 
JOIN articles ON items.article_id = articles.article_id 
JOIN article_layers ON articles.article_id = article_layers.article_id 

и много подобных запросов, но я не могу найти волшебную формулу для извлечения данных, что мне нужно. Любая помощь приветствуется.

ответ

0

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

SELECT *  
FROM items i 
INNER JOIN articles a ON i.article_id = a.article_id 
INNER JOIN article_layers al ON a.article_id = al.article_id 
INNER JOIN layers l ON al.layer_id = l.layer_id 
Смежные вопросы