主要表:'帖子'。
结构:
id || text || time || user_id
辅助表:'喜欢'
结构:
id || post_id || time || user_id
这里,第二个表中的post_id可以(并且必须)是第一个表中的ID。我正在运行一个查询,我从特定user_id的posts表中获取所有ID,并从特定user_id的likes表中获取所有POST_ID。这是查询:
SELECT p.id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR
l.user_id=$userid
两个表上的时间字段都是数字,类型为int(12)。 Unix时间戳存储在此处,如 1234567890 。我想订购我在两张桌子上按时间字段提取的数据。
例如,帖子表中有2个帖子,ID为1的帖子的时间值为1234567891,ID为2的帖子的时间值为1234567896。并且有1个帖子,其中ID为3时间价值为1234567893。
我想按时间排序,如下:
帖子ID 1,帖子ID 3,帖子ID 2。
由于邮政编号3在邮政编号2之前发生。我如何处理它,因为时间和它的值可以在任何一个表格中。
谢谢!
答案 0 :(得分:1)
在加入后,您有两个时间列,每个列一个。您需要为SQL提供一些逻辑以供两者使用 - 例如,按MAX(l.time,p.time)排序,以获得更大的值。
基本上,当你说“我想订购我在两个表上的时间字段中提取的数据”时,你需要更清楚地定义,然后应该直截了当地做你想要的。试着考虑如何手工完成,或者如何指导某人手工完成 - 如果你只是将这些记录交给纸上并说“按照两组数据中的时间字段按顺序排列“,他们不知道该怎么做 - 而MySQL也不知道!
答案 1 :(得分:0)
尝试在ORDER BY子句中使用CASE表达式。按时间顺序按时间< l.time THEN p.time ELSE l.time END CASE
答案 2 :(得分:0)
我认为最简单的方法是使用union语句将这些时间值放入一列。尝试这样的事情:
SELECT id from
(SELECT p.id, p.time FROM posts p
WHERE p.user_id=$userid
union all
SELECT l.id, l.time FROM posts p
INNER JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR
l.user_id=$userid) allposts
ORDER BY time