我有一个用户表,其中包含用户的完整名称。链接的表是:
用户
- id_user唯一的用户 ID
- 名称用户全名
用户图片
- id_picture
- 添加日期
- id_user 用户 ID
- url 图片 URL
用户访问
- id_visit
- 日期访问
- id_user_from这是你
- id_user_to这是访问过的用户
用户问题
- id_question
- 日期问题
- id_user_from这是你
- id_user_to这是访问过的用户
- 问题 这不相关
- 回答 这不相关
- flg_answered
事件报告必须显示以下事件:
- 用户上传的图片
- 用户回答的问题(由任何用户发送)
...但仅限于我之前访问过的用户,或者之前收到过我的问题的用户。
这是我当前的查询:
SELECT SQL_CALC_FOUND_ROWS
user.name,
user_question.date_question,
user_question.question,
user_question.answer,
user_picture.date_picture,
user_picture.description
FROM
user
LEFT JOIN user_question ON user_question.id_user_to = user.id_user
LEFT JOIN user_picture ON user_picture.id_user = user.id_user
WHERE (
user.id_user IN (
SELECT id_user FROM user
INNER JOIN user_visit ON user_visit.id_user_to = user.id_user
INNER JOIN user_question ON user_question.id_user_to = user.id_user
WHERE
user_visit.id_user_from = 1
OR
user_question.id_user_from = 1
)
)
在此示例中,ID 1 是我的用户 ID。当前问题:
- 结果的顺序应按时间顺序呈现(date_visit 和 date_question)
- 图片和问题记录正在混合到同一行中。它们应该是相互排斥的。
关于如何解决这两个问题有什么想法吗?谢谢!
最佳答案
看起来您正在尝试执行两个查询,然后按日期顺序散布它们的结果...您可能需要 UNION。 然后使用子选择来对结果进行排序。
SELECT SQL_CALC_FOUND_ROWS, *
FROM (
SELECT
user.name,
'picture' as type,
user_visit.date_visit as date,
user_picture.date_picture as data1,
user_picture.description as data2
FROM
user
JOIN user_visit ON (user_visit.id_user_to = user.id_user)
JOIN user_picture ON (user_picture.id_user_to = user.id_user)
WHERE user_visit.id_user_from = 1
UNION
SELECT
user.name,
'question' as type,
user_question.date_question as date,
user_question.question as data1,
user_question.answer as data2,
FROM
user
JOIN user_question ON user_question.id_user_to = user.id_user
WHERE user_question.id_user_from = 1
)
ORDER BY date;
关于MySQL 如何从与你有过交互的用户那里获取用户的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21892724/