PHP / MySQL:按顺序选择更新有序行

时间:2014-08-06 22:58:20

标签: php mysql

我正在寻找我的问题的答案超过一个小时,现在我真的很绝望。我希望你们在那个经常帮助我的网站上再次帮助我。

我需要一个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

我希望我能说明问题。

感谢您提前输入任何内容!

1 个答案:

答案 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