【问题标题】:how to combine more than one mysql query into single query如何将多个mysql查询组合成一个查询
【发布时间】:2014-03-27 12:54:33
【问题描述】:

我有 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 调用,以便所有这 3 个 query 都在 one 单个查询中执行,因此只调用 1 次 mysql server 并向使用 @987654329 的用户显示所有不同的结果@

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

【问题讨论】:

  • 是的,当然可以,但是没有表格结构就不可能提出任何建议。
  • 外键是什么?
  • 其实我只是在想如何才能只打一个电话而不是三个电话
  • 为了这些目的存在JOIN,但它取决于表结构......
  • 如果它们不相关,那么您可以进行联合,但请记住,它们都将出现在同一个记录集中,如果您将它们应用于菜单或下拉菜单,那么您需要多次循环并重置光标到第一个位置。

标签: php mysql codeigniter


【解决方案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['catID'] 而不是 $result['category_id']。

【讨论】:

  • 先生......这就是我要找的......但现在我如何使用 php 向用户显示所有不同的结果
  • 我已经调整了我的答案。希望对您有所帮助!
【解决方案2】:
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

【讨论】:

  • @Muhammad:它会给出如此模棱两可的数据。你将无法理解哪个是什么类型。
  • @Muhammad:我已经更新了我的答案。您可以添加第三列,这将为您提供表名,您可以区分结果。
【解决方案3】:

这将是准确的查询

$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?

【讨论】:

  • 三个表都不相互依赖或相互关联
  • 只需从三个表中选择所有列,然后处理输出数组。不为联合提出任何条件。
  • 此查询将解决您的问题。从 cmets,posts 中选择 cmets.ref、posts.id ;选择评论和帖子两个表,选择来自 cmets 的 ref 列,选择来自帖子的 id。
【解决方案4】:

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

【讨论】:

  • 三个表都不相互依赖或相互关联
【解决方案5】:

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

反之亦然

选择 c.category_id, c.category_name, l.location,l.location_name, o.category_date,o.category_month C类, 子类别 l, other_category o

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

【讨论】:

    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多