首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL连接+ SUBQUERY

MySQL连接+ SUBQUERY
EN

Stack Overflow用户
提问于 2012-04-24 22:40:54
回答 2查看 544关注 0票数 1

使用以下查询:

代码语言:javascript
复制
SELECT p.*,  i.*, GROUP_CONCAT(DISTINCT(pc.category_id)) AS post_categories, GROUP_CONCAT(DISTINCT(pt.tag_id)) AS post_tags 
FROM posts AS p 
LEFT JOIN images AS i ON p.post_image = i.image_id 
LEFT JOIN post_categories AS pc ON p.post_id = pc.post_id 
LEFT JOIN post_tags AS pt ON p.post_id = pt.post_id 
WHERE p.post_url="'.$id.'"

我将返回一个博客帖子列表,检索:

  1. 表中的每一列(用于post映像)、图像表(用于post映像)、
  2. 中的每一列、所有category_id(用于post)
  3. 的级联、所有tag_ids(用于post)H 211<代码>G 212的级联

这给我留下的,是两个没有实际帮助的领域:

  • 连接的category_id字符串(即“1,3”)
  • 和级联的tag_id字符串(即"2,5,8")

我真的很想在两个LEFT JOINS中执行一个子查询,这样我就可以返回以下列表:

  • category_name's (即“冥想,sports")
  • tag_name's”(即"iOS,PHP,MySQL")

每个职位。

我现在被困在两个类别和标记的子查询上。

表格结构:

发布

post_id、post_title等。

类别

category_id,category_name

标签

tag_id,tag_name

post_categories

post_id,category_id

post_tags

post_id,tag_id

问题是:是否有可能有效地做这样一件事,如果是的话,怎么做?

如果不是,我是否应该将SELECT * FROM categories存储在$categories数组中,然后每次将$categories数组中的每个category_id$posts数组中的每个post的爆炸category_id字符串进行比较?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 22:46:41

您应该能够连接到标记和类别表,然后将连接替换为name字段。(还必须向select中添加,以避免返回重复的主行。)

代码语言:javascript
复制
SELECT DISTINCT p.*,  i.*, 
    GROUP_CONCAT(DISTINCT(c.category_name)) AS post_categories,
    GROUP_CONCAT(DISTINCT(t.tag_name)) AS post_tags 
FROM posts AS p 
    LEFT JOIN images AS i ON p.post_image = i.image_id 
    LEFT JOIN post_categories AS pc ON p.post_id = pc.post_id 
    LEFT JOIN post_tags AS pt ON p.post_id = pt.post_id 
    LEFT JOIN categories AS c ON pc.category_id = c.category_id
    LEFT JOIN tags AS t ON pt.tag_id = t.tag_id
WHERE p.post_url="'.$_GET['id'].'"
票数 1
EN

Stack Overflow用户

发布于 2012-04-24 22:46:59

那么,为什么不直接在GROUP_CONCAT中获取相应的类别名称和标签描述而不是它们的in呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10307031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档