我尝试过不同的方法,但是......所以,我的最后一个选择,请求帮助。
我有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 ---- } }
答案 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 */
}