来自多个表的MySQLi

时间:2016-03-27 17:24:45

标签: php mysqli

我尝试过不同的方法,但是......所以,我的最后一个选择,请求帮助。

我有3个数据库表。在OBJECTS表中,我存储了每个网站OBJECTS,如过滤器名称,SAM和SAMP名称(特定于系统)。在ITEMS中,我存储了系统的所有项目(这些是具有更多选项的实际项目)和OBJECTS_LINKED,我将每个链接元素与对象和项目一起存储。

然后,我得到了系统,用户可以从过滤器中选择一些选项,然后我得到了项目列表...例如,在OBJECTS_LINKED我有3个项目的名称 - 过滤器,这些将显示,但我需要的,哪里有问题。我需要在列表中显示这些项目,如ASC订购的OBJECTS名称。

现在,一切正常,除了订购。代码是用PHP编写的。我得到了SQL查询,其中我得到了这些项ID,其中名称是从链接的对象过滤,然后是循环,其中我得到所有对象id,其中对象名称是SAM或SAMP并且它与项目ID链接,我从OBJECTS得到这个LINKED和OBJECTS与INNER JOIN ...但问题是,当我第一次得到这些项目ID时,他们得到了一些顺序,并且在下一个循环中它不计算我的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 ----
       }    
    }

1 个答案:

答案 0 :(得分: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 */
    }