我正在使用标准的 apache2 LAMP 配置(mysql 和 php5)和 UTF8 编码。
我已经设置了四个表。
第一个名为 articles
,有 6 列:
id INT(11) AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(1000),
posted (TIMESTAMP)
author_id INT(11),
extract TEXT,
body TEXT
第二个名为authors
id INT(11) AUTO INCREMENT PRIMARY KEY,
name VARCHAR(100),
img VARCHAR(100),
bio TEXT
第三个名为categories
id INT(2) AUTO_INCREMENT PRIMARY KEY,
cat_name VARCHAR(100)
第四个名为article_categories
id INT(2) AUTO_INCREMENT PRIMARY KEY,
article_id INT(11),
category_id INT(2)
现在我想要的是编写一个 mysql 查询来查找文章的标题、作者姓名和 cat_name。到目前为止,我已经想出了这个,它返回 10 行,基本上是我设置的所有类别。 (我在类别表中设置了一篇文章有 2 个类别和 5 个类别)。
这是我的查询:
SELECT articles.title, authors.name, categories.cat_name
FROM articles, authors, categories, article_categories
WHERE title LIKE '%introduction%';
我的结果:
+------------------------+-----------------------+--------------+
| title | name | cat_name |
+------------------------+-----------------------+--------------+
| An introduction to ptc | Yannick Šušteršič | free |
| An introduction to ptc | Yannick Šušteršič | free |
| An introduction to ptc | Yannick Šušteršič | members-only |
| An introduction to ptc | Yannick Šušteršič | members-only |
| An introduction to ptc | Yannick Šušteršič | milestone |
| An introduction to ptc | Yannick Šušteršič | milestone |
| An introduction to ptc | Yannick Šušteršič | basic |
| An introduction to ptc | Yannick Šušteršič | basic |
| An introduction to ptc | Yannick Šušteršič | advanced |
| An introduction to ptc | Yannick Šušteršič | advanced |
+------------------------+-----------------------+--------------+
有没有办法只显示一次文章,所有相应的类别名称在一行中?
如果没有,我如何才能只得到相关的结果?我究竟做错了什么?谢谢
最佳答案
您忘记比较作者和文章与类别:
SELECT
articles.title, authors.name, GROUP_CONCAT(categories.cat_name)
FROM
articles, authors, categories, article_categories
WHERE
title LIKE '%introduction%'
AND articles.author_id = authors.id
AND articles.id = article_categories.article_id
AND article_categories.category_id = categories.id;
已更新,这是最终正确的说法,由 OP 撰写。
关于返回双行的mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816996/