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


how to combine more than one mysql query into single query

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

$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调用,使所有这3个query都在one单个查询中执行,从而只调用mysql server一次,并使用php 向用户显示所有不同的结果

我该怎么做。。任何帮助或建议都会很有帮助。。提前感谢

您所描述的是一个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['category_id']而不是$result['catID']。

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

如果没有任何关系,就不应该组合查询。否则,它将给您提供不明确的数据。

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

无论如何,您可以得到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

这将是准确的查询

$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特定的列关于联接?

如果表是相关的,则可以使用联接。如果不是这样的话,你可以使用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"; 

如果所有3个查询都有相同的数据,那么我们可以合并所有3个搜索,否则就没有用了。

另一种方式,将按照

选择c.category_id、c.category_name,l.location,l.location_name,o.category_date,o.category_month从类别C,sub_ category l,其他类别o

但Above确实会得到有意义的数据。