我有这些表格:
USERS:
user_ID
username
password
email
data_registered
POSTS:
post_ID
user_ID
post_title
post_content
post_data
CATEGORY:
cat_ID
post_ID
cat_title
现在我使用了这种情况:
在USERS表中我有:
(1, 'admin, '5hj63jhn120011', 'admin@gmail.com', '15.02.2012')
POSTS表中的:
(1, 1, 'Hello', 'Content goes here', '15.02.2012')
在CATEGORY表中:
(1, 1, 'web developing'),
(2, 1, 'software programming'),
(3, 1, 'web design')
所以我只有1个用户,1个帖子和3个类别。如何在一个声明中选择它们?我用这句话:
SELECT
p.post_title,
p.post_content,
u.username,
c.cat_title
FROM
posts p
LEFT JOIN users u
ON p.user_ID = u.user_ID
LEFT JOIN category c
ON c.post_ID = p.post_ID
但是这会选择3行,包含3个不同的类别。我还在学习如何正确地进行JOIN查询,所以我将不胜感激。
之后,例如,我将有情况从COMMENTS表中选择数据,因此这将变得复杂。只需提一下这是评论表:
COMMENTS:
comment_ID
user_ID
post_ID
c_username
c_email
c_content
用户,帖子和类别完全选择此评论会很困难。所以还有一个问题是我可以拆分这些选择查询吗?这是一个很好的做法(当用PHP开发时)?
答案 0 :(得分:0)
尝试:
SELECT p.post_title,
p.post_content,
u.username,
group_concat(c.cat_title) categories
FROM posts p
LEFT JOIN users u ON p.user_ID = u.user_ID
LEFT JOIN category c ON c.post_ID = p.post_ID
group by p.post_id
- 如果您想查看同一行中单个帖子的所有类别。
答案 1 :(得分:0)
使用类似的东西:
SELECT
p.post_title,
p.post_content,
u.username,
GROUP_CONCAT(c.cat_title + ',') cat_titles
FROM posts p
LEFT JOIN users u
ON p.user_ID = u.user_ID
LEFT JOIN category c
ON c.post_ID = p.post_ID
GROUP BY
p.post_title,
p.post_content,
u.username
我不确定GROUP_CONCAT的正确用法,但看起来是否有效
答案 2 :(得分:0)
我认为应该是这样的:
POSTS:
post_ID
user_ID
cat_ID
post_title
post_content
post_data
CATEGORY:
cat_ID
cat_title
由于类别不需要与帖子相关,但每个帖子都需要与之相关的类别。
<强>更新强>
如果有多对多的意图那么它应该是这样的:
POSTS:
post_ID
user_ID
post_title
post_content
post_data
CATEGORY:
cat_ID
cat_title
POST_CATEGORY:
post_ID
cat_ID
答案 3 :(得分:0)
没有尝试过,我认为解决方案是:
SELECT p.post_title, p.post_content, u.username, c.cat_title
FROM users u LEFT JOIN posts p ON u.user_ID = p.user_ID
LEFT JOIN category c ON p.post_ID = c.post_ID
如果更改ID列的顺序,则LEFT JOIN的含义会发生变化。所以你得到三个结果行......