【发布时间】:2012-11-28 18:12:27
【问题描述】:
我正在使用 PHP/MySQL,我必须从现有表创建一个新表。这是有问题的:
表 1:
photo_id email name_to creation_date link
1 foo1@bar.com paul 2012-11-21 link1.com
2 foo2@bar.com mark 2012-11-22 link2.com
3 foo1@bar.com alex 2012-11-23 link3.com
4 foo1@bar.com saul 2012-11-25 link4.com
5 foo1@bar.com john 2012-11-26 link5.com
6 foo2@bar.com math 2012-11-27 link6.com
7 foo3@bar.com fred 2012-11-28 link7.com
Table1中的邮件不是唯一的,可以重复多次。每个链接都是不同的。有了这些数据,我必须创建一个新表,其中电子邮件是唯一的,如果一封电子邮件有更多条目,则最多有 3 个链接(如果是这样,我需要 3 个最新条目的数据)。
所以,在这种情况下,Table2 会是这样的:
email link1 creation_date1 name_to1 link2 creation_date2 name_to2 link3 creation_date3 name_to3
foo1@bar.com link5.com 2012-11-26 john link4.com 2012-11-25 saul link3.com 2012-11-23 alex
foo2@bar.com link6.com 2012-11-27 math link2.com 2012-11-22 mark
foo3@bar.com link7.com 2012-11-28 fred
我知道 GROUP_CONCAT 功能,但这并不是我真正需要的,因为链接都在同一列中。做一个 SELECT * FROM table1 并将结果处理成 PHP 数组,然后创建 Table2 或者一个唯一的 MySQL 查询会更好吗?或者创建多个 MySQL 表?
Table1 超过 1000 万行。
任何建议将不胜感激。
谢谢。
【问题讨论】:
-
为什么要标记 PHP?你在用 PHP 吗?
-
是的,我正在使用 PHP/MySQL。这里重要的部分是 MySQL 查询,但在 PHP 中执行该过程是否更好,这是我的疑问之一。
-
您可以考虑只取每个电子邮件地址的前 3 行,然后按降序对它们进行排序。这将为您提供三个最新的链接。然后,您可以将该数据添加到新表中。这不是一个主要的 SQL 查询解决方案,但我认为如果您使用脚本拆分步骤会更容易。