如何将多个mysql查询组合成单个查询

时间:2014-03-27 12:54:34

标签: php mysql codeigniter

我有3个不同的查询,如下所示:

$query = "select category_id,category_name from category";
$result = $this->Dbmodel->customQueryResult($query);

$query = "select location,location_name from sub_category";
$result_one = $this->Dbmodel->customQueryResult($query);

$query = "select category_date,category_month from other_category";
$result_two = $this->Dbmodel->customQueryResult($query);

在这里,我呼叫mysql服务器3次,以执行我的query,从而获得result ..

现在我正在考虑如何减少mysql来电,以便在query单个查询中执行所有这3个one,这样只需拨打mysql server一次并显示使用php

向用户显示所有不同结果

我怎么能这样做..任何帮助或建议都会有很大的帮助..提前感谢

5 个答案:

答案 0 :(得分:1)

这将是完全可靠的

$query = "select category.category_id,category.category_name, sub_category.location,sub_category.location_name,other_category.category_date,other_category.category_month from category,sub_category,other_category";

您可以使用类似的联合属性。

$query = "select * from category, sub_category, other_category";

注意:在*上,您可以阅读此问题MySQL - specific columns on join?

答案 1 :(得分:1)

您所描述的是SQL UNION。

以下是您可以用来实现目标的示例查询:

SELECT category_id,category_name FROM category
UNION
SELECT location,location_name FROM sub_category
UNION
SELECT category_date,category_month FROM other_category

使用示例:

$query = 'SELECT category_id, category_name FROM category
            UNION
            SELECT location, location_name FROM sub_category
            UNION
            SELECT category_date, category_month FROM other_category';
$result = $this->Dbmodel->customQueryResult($query);

echo 'CategoryID: ' . $result['category_id'] . '<br />';
echo 'Category Name: ' . $result['category_name'] . '<br />';
echo 'Location: ' . $result['location'] . '<br />';
echo 'Location Name: ' . $result['location_name'] . '<br />';
echo 'Category Date: ' . $result['category_date'] . '<br />';
echo 'Category Month: ' . $result['category_month'];

请记住,如果您需要从不同的表中选择具有相同名称的字段以使用SQL别名。别名的一个例子:

SELECT category_id AS `catID` FROM category

而不是$ result [&#39; category_id&#39;],而是使用$ result [&#39; catID&#39;]代替。

答案 2 :(得分:1)

As you are saying none of the tables are related, you have to fetch 3 queries.

如果没有任何关系,则不应合并查询。否则它会给你含糊不清的数据。

当存在某种关系以最小化查询时,我们使用子查询,连接。

无论如何,如果第1列,第2列具有相同的数据类型,您可以获得3个查询结果,并且您可以从第3列中识别它的表名。

SELECT category_id,category_name, 'category' FROM category
UNION
SELECT location,location_name, 'sub_category' FROM sub_category
UNION
SELECT category_date,category_month, 'other_category' FROM other_category

答案 3 :(得分:0)

如果表格相关,您可以使用连接。如果不是这种情况你可以使用mysql UNION

这就像......

$query = "select category_id,category_name from category UNION select location,location_name from sub_category UNION select category_date,category_month from other_category"; 

答案 4 :(得分:0)

如果所有3个查询都有相同的数据,那么我们可以合并所有3个查询,否则它将无用。

另一种方式,就像跟随

选择c.category_id,c.category_name, l.location,l.location_name, o.category_date,o.category_month  来自C类,  sub_category l,  other_category o

但是上面会得到有意义的数据。