返回双行的mysql查询

标签 mysql

我正在使用标准的 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/

相关文章:

mysql - 列出在 MySQL 表的特定列中具有重复条目的所有行

一个简单数据库的 C#-mySQL 连接程序,具有 1 个执行基本操作的表

mysql - 使用 Workbench 迁移向导通过 ssh 将 MS SQL Server 数据库迁移到 MySQL

c# - 另一个域上的 ASP.NET 应用程序可以与另一个域上的 Mysql 数据库集成吗

php - 如何从mysql表中获取空白或空值或0的列数

mysql - VB.net block 复式输入

php - 获取其他表中的新闻总数

MySQL向字段添加文本

java - 使用 mySQL 数据从单个下拉列表微调器迁移到依赖微调器

MySQL:加入很多:在两个表中选择总和