我有一个Web应用程序,必须从其他表中删除条目,通过表1中的“tielists”选择过滤 - > item_table 1,表2,表3 ....现在基本上我的结果集将是肮脏的大,除非我使用user_id来使用另一个表中的过滤器语句...所以有人可以帮助我根据需要构建我的语句? TY!
cars_belonging_to_user
-----------------------------
ID | user_id | make | model
----------------------------
1 | 1 | Toyota | Camry
2 | 1 |Infinity| Q55
3 | 1 | DMC | DeLorean
4 | 2 | Acura | RSX
Okay, Now the three 'tielists'
name:tielist_one
----------------------------
id | id_of_car | id_x | id_y|
1 | 1 | 12 | 22 |
2 | 2 | 23 | 32 |
-----------------------------
name:tielist_two
-------------------------------
id | id_of_car | id_x | id_z|
1 | 3 | 32 | 22 |
-----------------------------
name: tielist_three
id | id_of_car | id_x | id_a|
1 | 4 | 45 | 2 |
------------------------------
echo name_of_tielist_table
// I can structure if statements to echo result sets based upon the name
// Future Methodology: if car_id is in tielist_one, delete id_x from x_table, delete id_y from y_table...
// My output should be a double select base:
--SELECT * tielists from WHERE car_id is 1... output name of tielist... then
--SELECT * from specific_tielist where car_id is 1.....delete x_table, delete y_table...
考虑到列表将是庞大的,并且tielist同样长,我必须过滤结果car_id(id) = $variable && user_id = $id....
任何单一的传教士中只会出现一次车识别。
此select语句必须使用user_id = $ variable ...进行过滤(并记住,我正在寻找哪个车辆ID)
我必须拥有它能够被变成变量的传递者的名字......
我将在任何给定时间只查找一个id_of_car
,因为此选择将包含在foreach循环中。
我在考虑union all
个项目可以选择行,但是如何获取行所在的tielist的名称,以及如何从user_id使用过滤器行
答案 0 :(得分:1)
如果您想要表现,我建议left outer join
而不是union all
。这将允许查询为您的目的有效地使用索引。
根据您的说法,汽车恰好是其中一个列表。这对于这种方法起作用很重要。这是SQL:
select cu.*,
coalesce(tl1.id_x, tl2.id_x, tl3.id_x) as id_x,
tl1.y, tl2.idz, tl3.id_a,
(case when tl1.id is not null then 'One'
when tl2.id is not null then 'Two'
when tl3.id is not null then 'Three'
end) as TieList
from Cars_Belonging_To_User cu left ouer join
TieList_One tl1
on cu.id_of_car = tl1.id_of_car left outer join
TieList_Two tl2
on cu.id_of_car = tl2.id_of_car left outer join
TieList_Three tl3
on cu.id_of_car = tl3.id_of_car;
然后,您可以根据需要添加where
子句进行过滤。
如果每个tielist表都有id_of_car
的索引,那么性能应该非常好。如果where
子句在第一个表上使用索引,那么连接和应该在哪里使用索引,并且查询将非常快。