复杂的MySQL查询 - 选择唯一记录,计数,插入和删除

时间:2011-07-28 00:21:03

标签: php mysql

我是新人!这是新的,MySQL和PHP的新功能。而我正试图做一些让我感到困惑的事情。请尝试帮助我们。

我有一张包含一些样本数据的表格如下:

ID  NAME    ATTRIBUTE
1   John     123
2   Sean     654
3   John     987
4   Audrey   458
5   John     123
6   Audrey   589
7   Peter    257
8   Marc     125
9   Audrey   326
10  Stan     456
11  Carol    698

以下是我打算做的清单 -

  1. 选择前6条记录

  2. 从6条选定的记录中查找唯一名称 - 预期结果:3个唯一名称(John,Sean& Audrey)

  3. 从选定的6条记录中查找每个唯一名称的属性数 - 预期结果:John(3个属性),Sean(1个属性)和Audrey(2个属性)。

  4. 计算所选6条记录中每个唯一名称的相同属性数 - 预期结果:名称=>约翰,属性=> 123,发生次数=> 2,Name =>约翰,属性=> 987,出现次数=> 1等。

  5. 从上面的选择中,以下列格式将数据插入新数据库表(例如,唯一名称):

    一个。 NameID(与最后一个表不同,新id - 自动生成),    湾姓名

    在另一个表格中(例如属性)

    一个。 ID(自动生成),    湾属性,    C。 NameID(应该与最后的ID相同) - 这是针对唯一名称和属性表之间的关系)    d。出现(每个唯一名称的每个属性)

  6. 一旦新表填满了数据,我想从收集它们的第一个表中删除前6个选定记录。 (顶级表)

  7. 有人可以帮助我查询MySQL查询和支持PHP代码。另外,如果我在表中有数百万的数据,我想知道查询MySQL的最佳和最快的方法。

1 个答案:

答案 0 :(得分:0)

问题1:

SELECT t.id,  t.name,t.attribute FROM t LIMIT 6

问题2:

SELECT DISTINCT t.name FROM (SELECT t.id, t.name, t.attribute FROM t LIMIT 6) t

问题3:

SELECT t.name, COUNT(t.attribute) AS number_of_attributes FROM(SELECT t.id, t.name, t.attribute FROM t LIMIT 6) t
GROUP BY t.name
ORDER BY number_of_attributes desc

问题4:

SELECT t.name, t.attribute, COUNT(t.attribute) AS Appears FROM (SELECT t.id, t.name, t.attribute FROM t LIMIT 6) t
GROUP BY t.name,t.attribute
ORDER BY Appears desc

问题5: 第一部分:必须分2步完成,首先选择唯一的名称 - 从首先选择的前6位 - 然后添加auto_increment列:

CREATE TABLE unique_names SELECT DISTINCT t.name FROM t

ALTER TABLE unique_names ADD name_id INT AUTO_INCREMENT PRIMARY KEY FIRST

第二部分:与第一部分相同,但在这种情况下获取我们与在此步骤的第一部分中创建的表连接的ID,然后我们添加auto_increment

CREATE TABLE attributes SELECT t.attribute,un.name_id FROM t INNER JOIN unique_names un ON t.name=un.name

ALTER TABLE attributes ADD id INT AUTO_INCREMENT PRIMARY KEY FIRST

问题6:

DELETE FROM t LIMIT 6

在这种情况下,我使用t作为原始表名