我必须从四个表中获取数据。我用四个查询编写了脚本,但我在ajax中使用它,我不想通过一个查询来完成它。 这是查询...
$query1 = "SELECT `id`,`name_ar` FROM `tour_type` ORDER BY `order`";
$query2 = "SELECT `id`,`name_ar` FROM `hotel_type` ORDER BY `order`";
$query3 = "SELECT `id`,`name_ar` FROM `food_type` ORDER BY `order`";
$query4 = "SELECT `id`,`name_ar` FROM `cities` WHERE `id_parrent` = '$id_parrent' ORDER BY `name_ar`";
是否可以在一个查询中写入? 感谢
表的结构 tour_type
id | name_ar | name_ru | name_en | order |
food_type
id | name_ar | name_ru | name_en | order |
hotel_type
id | name_ar | name_ru | name_en | order |
cities
id | id_parrent | name_ar | name_ru | name_en | order |
答案 0 :(得分:4)
UNION [ALL]
函数允许您组合多个查询,但列数据类型和顺序在所有查询之间必须相同。此外,UNION
将删除重复项 - 使其比使用UNION ALL
(不会删除重复项)慢。
也就是说,UNION语句不允许每个语句使用ORDER BY,但是如果你将查询放在括号内,MySQL支持这个。使用:
(SELECT id, name_ar FROM tour_type ORDER BY order)
UNION ALL
(SELECT id, name_ar FROM hotel_type ORDER BY order)
UNION ALL
(SELECT id, name_ar FROM food_type ORDER BY order)
UNION ALL
(SELECT id, name_ar FROM cities WHERE id_parent = ? ORDER BY name_ar)
答案 1 :(得分:2)
当然,请使用UNION
。如果对您来说很重要,可以包含一个关于行源的伪列:
SELECT id,name_ar,'tour' FROM tour_type
UNION
SELECT id,name_ar,'hotel' FROM hotel_type
UNION
SELECT id,name_ar,'food' FROM food_type
UNION
SELECT id,name_ar,'cities' FROM cities WHERE id_parrent = $id_parrent
您可能需要使用您想要的任何ORDER
。
答案 2 :(得分:1)
快速简便的方法是尝试四个UNION
语句中的select
。只要列数相同且列名相同,您的数据库系统就可以让您逃脱它。
我们可能不应该进入关系建模/设计,因为有许多不同的意见和风格,但......如果它们都只是“类型”,那么它们可能应该在一个表中。有很多不同的方法可以给这只猫上皮。
答案 3 :(得分:0)
我认为你可以使用UNION这样做:
SELECT `id`,`name_ar` FROM `tour_type` ORDER BY `order`
UNION
SELECT `id`,`name_ar` FROM `hotel_type` ORDER BY `order`
您可以使用UNION或使用UNION ALL。可以在此处查看更具体的示例Union sqlserver
答案 4 :(得分:0)
由于您拥有一致数量的列,您可以使用某种键标识符将它们组合在一起,例如:
select 'TBL1' as table_identifier, id, name from TBL1
union
select 'TBL2' as table_identifier, id, name from TBL2
...
但是4个写得好,映射到单个对象的查询会更好的设计,除非你急需这些额外的毫秒,否则我会坚持使用好的设计而不是快速而肮脏的查询。