我正在寻找我的问题的答案超过一个小时,现在我真的很绝望。我希望你们在那个经常帮助我的网站上再次帮助我。
我需要一个PHP / MySQL解决方案,无论哪个做什么。表现也不是问题。遗憾的是,我必须使用没有主键的给定表格。
现实世界问题的逻辑是,一个t2.name可能有多个事件可以通过t2.date排序。可能存在等于t2.name的t1.name,其可能具有可由另一列t1.time排序的多个事件。现在我想合并相同名称的事件,按时间匹配。换句话说:具有最新t1.time的t1.name行应与具有最新t2.date的相同t2.name匹配。第二次出现的名称应该与第二个最新的日期和时间相匹配,依此类推。我怎么意识到这一点?
在语法失败中描述 - 我已经尝试了以下(以及更多):
UPDATE table1 t1
LEFT JOIN table2 t2
ON t1.name = t2.name
SET t1.date = t2.date
和
UPDATE table1 t1
SET t1.date = (SELECT date FROM table2 t2
WHERE t1.name = t2.name
ORDER BY date DESC LIMIT 1)
WHERE t1.date <=> NULL ORDER BY t1.time
但两者都将t1.date设置为最新的t2.date,无论它出现在哪个名称。
举例说明数据:
t1.name t1.time
Pete Nov13
Pete Apr13
Pete Jan12
t2.name t2.date
Pete Mar13
Pete Feb11
Pete Dec13
我想要的是:
t1.name t1.time t2.date
Pete Nov13 Dec13
Pete Apr13 Mar13
Pete Jan12 Feb11
我希望我能说明问题。
感谢您提前输入任何内容!
答案 0 :(得分:0)
为每个表创建自动增量键并与键匹配
SELECT t1.name, t1.time, t2.date
FROM (SELECT (@cnt := @cnt + 1) AS rowNumber, t1.* FROM (SELECT * FROM t1 ORDER BY time) AS t1 CROSS JOIN (SELECT @cnt := 0) AS dummy) AS t1,
(SELECT (@cnt := @cnt + 1) AS rowNumber, t2.* FROM (SELECT * FROM t2 ORDER BY date) AS t2 CROSS JOIN (SELECT @cnt := 0) AS dummy) AS t2
WHERE t1.rowNumber = t2.rowNumber