从具有多个表的SQL获取X结果

时间:2017-02-28 12:21:55

标签: mysql sql

(抱歉我的英文不好,我会尽力做到最清楚)

我想在MySQL表中选择一个用户的5个对话(超过一个未确定的数字,可能有5或300个对话),对于每个用户,我想选择所有在其中进行通话的用户。< / p>

在一个美好的世界里,我想用一个查询来做这件事。

我的查询看起来像(表格是法语,plz不会伤害我):

SELECT mc.mc_id, mc.mc_sujet, mc.mc_statut,
  miu.mi_ustatut as uself_statut, miu.mi_datelecture as uself_datelecture,
  mi.mi_uid, mi.mi_ustatut, mi.mi_datelecture,
  u.u_pseudonyme
FROM msg_individus as miu
  LEFT JOIN msg_conversations as mc ON mc.mc_id = miu.mi_mcid
  LEFT JOIN msg_individus as mi ON mi.mi_mcid = mc.mc_id
  LEFT JOIN u_individus as u ON u.u_id = mi.mi_uid
WHERE miu.mi_uid = :u_id

msg_individus是与会话参与者的表格, msg_conversations是对话表(ID,主题,状态), u_individus是包含用户信息的表。

要仅选择其中的5个会话,我添加了类似

的内容
GROUP BY mc.mc_id,
LIMIT 0,5

但是,当然,每次会话只有一个用户就是这样。

我也尝试编写GROUP BY mc.mc_id, mi.mi_uid,但这就像没有编写GROUP BY条件一样,返回5次迭代,如:

(Conversation 1 has two users, conversation 2 has one, conversation 3 has four)
Iteration 1 : conversation 1, user 1
Iteration 2 : conversation 1, user 2
Iteration 3 : conversation 2, user 1
Iteration 4 : conversation 3, user 1
Iteration 5 : conversation 3, user 2

我想要的是获得五个CONVERSATIONS及其所有数据(无论其中的用户数量等)

我想我将不得不使用两个查询(在获得5个对话之后,我会在每个对话中获得用户),但也许你们可以用你的知识点亮我。

THX。

1 个答案:

答案 0 :(得分:2)

使用子查询获得五个对话。我还建议你用内连接替换外连接。我认为表键应该都有匹配:

SELECT mc.mc_id, mc.mc_sujet, mc.mc_statut,
       miu.mi_ustatut as uself_statut, miu.mi_datelecture as uself_datelecture,
       mi.mi_uid, mi.mi_ustatut, mi.mi_datelecture,
       u.u_pseudonyme
FROM (SELECT miu.*, mc.*
      FROM msg_individus miu JOIN
           msg_conversations mc
           ON mc.mc_id = miu.mi_mcid
      WHERE miu.mi_uid = :u_id
      ORDER BY rand()  -- not necessary, but why not?
      LIMIT 5
     ) ic
     msg_individus  mi
     ON mi.mi_mcid = ic.mc_id JOIN
     u_individus u
     ON u.u_id = ic.mi_uid;