【问题标题】:MySQL query problematicMySQL查询有问题
【发布时间】: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 查询解决方案,但我认为如果您使用脚本拆分步骤会更容易。

标签: php mysql sql


【解决方案1】:

1) 选择所有唯一的电子邮件。

2) 对于每封电子邮件,取前 3 行,该电子邮件按 creation_date 降序排列。

3) 使用该数据插入新表。

你怎么想?

【讨论】:

  • 是的,不确定这是否是最有效的方法,但它确实有效。谢谢!
  • 是的,对不起,我不是一个伟大的 SQL 专家,我知道如何在所有 SQL 查询中做到这一点。
猜你喜欢
  • 2016-04-15
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多