2016-03-27 5 views
0

Я пробовал разные способы сделать это, но ... Итак, мой последний вариант, попросите о помощи.MySQLi из нескольких таблиц

У меня есть 3 таблицы DB. В таблице OBJECTS я хранил каждый веб-сайт OBJECTS, например имена фильтров, имена SAM и SAMP (специфичные для системы). В ITEMS я сохранил все элементы для системы (это проекты реального мира с несколькими дополнительными параметрами) и OBJECTS_LINKED, я сохранил все связанные элементы с ОБЪЕКТАМИ и ITEMS.

Затем я получил систему, где пользователь может выбрать какой-либо параметр из фильтра, затем я получил список элементов ... Пример: в OBJECTS_LINKED У меня есть 3 элемента с именем - фильтр, они будут показаны, но мне нужно , где проблема. Мне нужно показать эти элементы в списке, например, имя ОБЪЕКТА, заказанное ASC.

Прямо сейчас, все работает, кроме заказа. Код написан на PHP. Я получил SQL-запрос, где я получил этот идентификатор элемента, где name является фильтром из связанных объектов, тогда есть цикл, где я получил все объекты id, где имя объекта SAM или SAMP, и оно связано с идентификатором элемента, я получил это от OBJECTS LINKED и OBJECTS с INNER JOIN ... Но проблема в том, что, когда я впервые получил этот идентификатор элемента, они попали в некоторый порядок, и в следующем цикле он не учитывает мой SQL QUERY ORDER BY, но он идет, как сказал цикл ... поэтому, я думаю, это можно сделать в одном запросе без этого цикла, но я не знаю, как, потому что я плохо разбираюсь в SQL.

 
---- OBJECTS ---- 
id - content  -  name 
1  - 1.2. Text -  SAM 
2  - 1.3. Text -  SAMP 
3  - 1.1. Text -  SAM 
4  - Filter  -  Filter 
 
---- ITEMS ---- 
id - some columns... 
1  - ... 
2  - ... 
3  - ... 
 
---- OBJECTS_LINKED ---- 
id - obj_id -  item_id - name 
id -  1  -  1  - SAM 
id -  2  -  1  - FILTER 
id -  4  -  2  - SAM 
id -  3  -  3  - SAMP 
 

    $SQL = "SELECT * FROM OBJECTS_LINKED WHERE obj_id = '$obj_id' AND link_name = 'FILTER'"; 
    while(){ 
    $SQL = "SELECT ol.*, o.obj_content, i.item_type, i.item_kartina FROM OBJECTS_LINKED AS ol 
    INNER JOIN ITEMS AS i ON i.item_id = ol.item_id 
    INNER JOIN OBJECTS AS o ON o.obj_id = ol.obj_id 
    WHERE ol.item_id = '$item_id' AND if(i.item_type = 'SAM', link_name = 'SAM', link_name = 'SAMP') 
    ORDER BY o.obj_content ASC"; 
     while(){ 
     ---- list of items (SAM or SAMP) name ---- 
     }  
    } 

+0

Является ли переменная '$ item_id' в вашем втором запросе результатом запроса первого выбора? – Reversal

+0

Рассмотрите возможность добавления полного кода: то, как вы показали свой код, просто сбивает с толку, и это нам не помогает. – Reversal

+0

@Reversal yes, is – brass

ответ

0

Я сделал это, но если кто-то хотел бы знать, как, поэтому я отправляю мое решение здесь.

$SQL = "SELECT ol.*, o.obj_content, i.item_type, i.item_kartina 
FROM OBJECTS_LINKED AS ol 
INNER JOIN ITEMS AS i ON i.item_id = ol.item_id 
INNER JOIN OBJECTS AS o ON o.obj_id = ol.obj_id 
WHERE ol.item_id IN (SELECT item_id FROM OBJECTS_LINKED WHERE obj_id = '$obj_id' AND link_name = 'FILTER') AND if(i.item_type = 'SAM', link_name = 'SAM', link_name = 'SAMP') 
ORDER BY o.obj_content ASC"; 
    while(){ 
     /* LIST OF ITEMS ORDERED BY obj_content from OBJECTS table WHERE OBJECTS and ITEMS are linked */ 
    } 
Смежные вопросы