一个查询而不是四个 - 是否可能?

时间:2010-05-17 16:46:55

标签: sql mysql phpmyadmin union

我必须从四个表中获取数据。我用四个查询编写了脚本,但我在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 |

5 个答案:

答案 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个写得好,映射到单个对象的查询会更好的设计,除非你急需这些额外的毫秒,否则我会坚持使用好的设计而不是快速而肮脏的查询。