MySQL 如何从与你有过交互的用户那里获取用户的事件?

标签 mysql sql left-join join

我有一个用户表,其中包含用户的完整名称。链接的表是:

用户

  • 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/

相关文章:

mysql - SELECT JOIN 与条件 (OR) 交叉

php - 重新定义行名称

mysql删除表中的重复项

php - 使用php从MySQL返回信息

mysql查询查找具有类(class)组合的学生

php - CakePHP 查询返回两行而不是一行

MySQL : Filter selected value based on value from another table

sql - 如何先查询table1,同时用results+table2进行第二次查询

sql - 计算每列值的频率,显示所有填充空白的列的结果

MySQL 查询,从多个数据库之一选择字段