我有三个不同的查询,如下所示:
$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确实会得到有意义的数据。