我有两个表,表reseau_stream有关于我的用户帖子的不同信息。用户可以共享其他人的帖子。表reseau_share使得连接成为可能(您有下面两个表的详细信息)。现在,如果用户分享其他人发帖,我必须使用reseau_share的日期时间来订购我的查询。
我没有很多MySQL技能,但在一些帮助下,我终于得到了以下查询。仅当reseau_share中有一行时才有效。如果reseau_share为空,则查询返回0结果。我真的不明白为什么。谁能找出原因?干杯。
id user_id content datetime
1 100 Lorem Ipsum1 2013-03-04 19:35:02
2 100 Lorem Ipsum2 2013-03-04 12:35:02
id user_id target_id stream_id datetime
-------------------- EMPTY ------------------------
SELECT reseau_stream.id,
reseau_stream.user_id,
reseau_stream.content,
IF(reseau_stream.user_id = 100, reseau_stream.datetime, reseau_share.datetime) as datetime
FROM reseau_stream, reseau_share
WHERE reseau_stream.id
IN (
SELECT id
FROM reseau_stream
WHERE user_id = 100
UNION
SELECT stream_id
FROM reseau_share
WHERE user_id = 100
) ORDER BY datetime DESC;
答案 0 :(得分:2)
具有空集的非空集的笛卡儿乘积是空集。
FROM
语句中的多个表使用上面的规则来连接两个表,在您的情况下最终得到0个结果。
答案 1 :(得分:2)
基本上,LEFT JOIN
上需要reseau_share
。现在你有一个FULL OUTER JOIN
,其中(a)导致零行,正如@diegoperini所指出的那样,(b)可能不是你真正想要的。目前还不清楚哪两列与这两个表有关。我猜它是user_id
:
SELECT
reseau_stream.id,
reseau_stream.user_id,
reseau_stream.content,
IF(reseau_stream.user_id = 100, reseau_stream.datetime, reseau_share.datetime) as datetime
FROM reseau_stream
LEFT JOIN reseau_share ON reseau_stream.user_id = reseau_share.user_id
WHERE reseau_stream.id
IN (
SELECT id
FROM reseau_stream
WHERE user_id = 100
UNION
SELECT stream_id -- or whatever
FROM reseau_share
WHERE user_id = 100
)
ORDER BY datetime DESC;