我正在尝试在连接查询中添加新案例,但它不会影响结果。
我有一个包含用户帖子的表,查询检查谁是该用户的朋友(通过user_id),然后检查该帖子是否已被标记5次或更多次。 “直到这里工作正常。如果帖子是公开的,我希望现在检查一下。所以在这种情况下,它应该忽略友谊案例。
新案例添加前的工作查询:
$sql = "SELECT COUNT(*) AS count_posts
FROM mutamba_posts
INNER JOIN
(
SELECT aluno_id
FROM mutamba_amigos
WHERE mutamba_amigos.amizade_id IN
(
SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}'
)
GROUP BY aluno_id
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id
WHERE mutamba_posts.post_flags < 5
ORDER BY mutamba_posts.post_date DESC";
添加新案例检查后(不做任何事情):
$sql = "SELECT *
FROM mutamba_posts
INNER JOIN
(
SELECT aluno_id
FROM mutamba_amigos
WHERE mutamba_amigos.amizade_id IN
(
SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}'
)
GROUP BY aluno_id
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id
WHERE mutamba_posts.post_flags < 5
OR (mutamba_posts.post_visibility = 'show_all' AND mutamba_posts.post_flags < 5)
ORDER BY mutamba_posts.post_date DESC
LIMIT {$start}, {$limit}";
非常感谢您的帮助。
编辑2:我很抱歉花了太长时间才回来,我不在了。
这是我的表格和一些示例数据。
帖子TBl:
post_id| aluno_id | post_text | post_flags | post_visibility |post_date
--69---|-----9----|Hello world|------0-----|------show_all-- |2015-01-19
--70---|-----2----|Hi friends |------0-----|------friends----|2015-01-19
--71---|-----1----|somedays.. |------2-----|------friends----|2015-01-19
友谊TBl:
id | aluno_id | amizade_id | bloqueado | date
24 |----2-----|-----33-----|-----0-----|2015-01-02
25 |----1-----|-----34-----|-----0-----|2015-01-02
26 |----1-----|-----35-----|-----0-----|2015-01-02
27 |----2-----|-----35-----|-----0-----|2015-01-02
28 |----9-----|-----36-----|-----0-----|2015-01-02
预期的输出,学生1和2(aluno_id 1和aluno_id 2)将能够看到他们自己的帖子,因为他们是朋友和学生9 aluno_id 9的帖子,因为它设置为show_all
。然而,学生9 aluno_id 9
只能看到自己的帖子,因为他没有朋友。
答案 0 :(得分:1)
您的查询中的问题是您正在同时检查mutamba_posts.post_visibility = 'show_all' and mutamba_posts.post_flags < 5
。
要在mutamba_posts.post_flags < 5
可见性时消除public
,您无法在它们之间使用and
运算符,而是使用OR
运算符。试试这个。
SELECT *
FROM mutamba_posts
INNER JOIN
(
SELECT aluno_id
FROM mutamba_amigos
WHERE mutamba_amigos.amizade_id IN
(
SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}'
)
GROUP BY aluno_id
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id
WHERE mutamba_posts.post_flags < 5
OR mutamba_posts.post_visibility = 'show_all'
ORDER BY mutamba_posts.post_date DESC
更新:
SELECT mutamba_posts.*
FROM mutamba_posts
INNER JOIN
(
SELECT aluno_id
FROM mutamba_amigos
WHERE mutamba_amigos.amizade_id IN
(
SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}'
)
GROUP BY aluno_id
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id
WHERE mutamba_posts.post_flags < 5
OR mutamba_posts.post_visibility <> 'show_all'
Union all
SELECT *
FROM mutamba_posts
WHERE mutamba_posts.post_visibility = 'show_all'
ORDER BY post_date DESC