【问题标题】:Join two queries from different tables连接来自不同表的两个查询
【发布时间】:2013-09-07 23:27:30
【问题描述】:

如何将这两个查询合并为一个?

第一个查询获取特定类别的所有posts_id; post_category 表中的 postId 等于 post 表中的 id

select distinct postId 
  from post_category 
  where categoryId='125' or categoryId='3'

然后我想加入他们,所以它会从 post_category 中选择所有 postId 在 post 表中

SELECT * FROM post <<query one join>> AND approve=1"

发帖

  +--------------+-----------------------+------+-----+---------------------+----------------+
    | Field        | Type                  | Null | Key | Default             | Extra          |
    +--------------+-----------------------+------+-----+---------------------+----------------+
    | id           | int(11)               | NO   | PRI | NULL                | auto_increment |
    | autor        | varchar(40)           | NO   | MUL |                     |                |
    | date         | datetime              | NO   | MUL | 0000-00-00 00:00:00 |                |
    | short_story  | text                  | NO   | MUL | NULL                |                |
    | full_story   | text                  | NO   | MUL | NULL                |                |
    | xfields      | text                  | NO   |     | NULL                |                |
    | title        | varchar(255)          | NO   | MUL |                     |                |
    | descr        | varchar(200)          | NO   | MUL |                     |                |
    | keywords     | text                  | NO   |     | NULL                |                |
    | category     | varchar(200)          | NO   | MUL | 0                   |                |
    | alt_name     | varchar(200)          | NO   | MUL |                     |                |
    | comm_num     | mediumint(8) unsigned | NO   | MUL | 0                   |                |
    | allow_comm   | tinyint(1)            | NO   |     | 1                   |                |
    | allow_main   | tinyint(1) unsigned   | NO   | MUL | 1                   |                |
    | approve      | tinyint(1)            | NO   | MUL | 0                   |                |
    | fixed        | tinyint(1)            | NO   |     | 0                   |                |
    | allow_br     | tinyint(1)            | NO   |     | 1                   |                |
    | symbol       | varchar(3)            | NO   | MUL |                     |                |
    | tags         | varchar(255)          | NO   | MUL |                     |                |
    | metatitle    | varchar(255)          | NO   |     |                     |                |
    | FileTempUUID | varchar(11)           | YES  |     | NULL                |                |
    +--------------+-----------------------+------+-----+---------------------+----------------+

post_category;

+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| cid        | bigint(11)  | NO   | PRI | NULL    | auto_increment |
| postId     | int(11)     | NO   |     | NULL    |                |
| categoryId | smallint(6) | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

【问题讨论】:

  • {$join} 的值是什么?
  • 在我们不知道你的数据库结构之前很难猜到
  • 请将 SQL 与 PHP 分开(即显示 SQL 和关系结构)。 PHP 如何生成这个 SQL 与 SQL 将如何执行连接无关(如果它生成不正确,那么这只是代码中的一个错误,与 SQL 或连接无关)。所以,最后:显示 [打算] 执行的实际 SQL.

标签: php mysql sql join


【解决方案1】:

作为您的表架构,试试这个连接:

SELECT 
    p.* 
FROM 
    post p
LEFT OUTER JOIN post_category c ON (c.postId = p.id)
WHERE 
    c.categoryId IN (125,3) AND p.approve=1
GROUP BY p.id

如果需要,还可以使用 GROUP BY p.id 来区分帖子。

【讨论】:

  • @hallaji 我相信这个应该留下 加入返回所有帖子
【解决方案2】:

应该这样做:

SELECT DISTINCT postId post.* FROM post_category 
LEFT JOIN post ON post_category.postId = post.id
WHERE (categoryId='125' OR categoryId='3') AND post.approve = 1

【讨论】:

    【解决方案3】:

    我认为变量{$join}指的是字符串这是完全错误的,SQL中有一个特殊的关键字叫做Join,我会尽量写SQL语句来做我猜你想要的

    $sql = "Select a.postId, a.categoryId, b.* from post_category a, post b where a.postId = b.id and (a.categoryId='125' or a.categoryId='3')
    

    @编辑 如果我理解你的评论,你的代码会导致这个

     SELECT * FROM post select distinct postId 
      from post_category 
      where categoryId='125' or categoryId='3' AND approve=1"
    

    这是完全错误的 SQL 语句

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2013-07-04
      • 2018-09-08
      相关资源
      最近更新 更多