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


Complex MySQL Query - Select Unique Records, Count, Insert and Delete

我是新来的!这里是新的,MySQL和PHP是新的。我想做一件让我很困惑的事。请试着帮帮我,伙计们。

我有一个表,其中有一些示例数据如下:

<>之前Id名称属性约翰一书1232 Sean 654约翰福音9874奥黛丽4585约翰福音1236奥黛丽589彼得前书2578马克1259奥德丽32610 Stan 45611 Carol 698之前

这是我打算做的事情的列表-

  1. 选择前6条记录

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

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

  4. 统计所选6条记录中唯一名称对应的相同属性个数。—预期结果:name => John, Attribute=> 123, No。of Occurrence=> 2, Name=> John, Attribute=> 987, No。

  5. 从上面的选项中插入数据到新的数据库表(例如Unique Names),格式为:

    。NameID(与上一个表不同,新id -自动生成),b.名称

    在另一个表中(如Attributes)

    。ID(自动生成),b。属性,c. NameID(应该与最后的ID相同)-这是唯一名称和属性表之间的关系)d.出现次数(每个唯一名称下的每个属性)

  6. 一旦新表中填充了数据,我想从第一个表中删除前6个选择的记录。(The Top Table)

有人可以帮助我MySQL查询和支持PHP代码这一个。此外,我想知道最好和最快的方法来查询MySQL的上述,如果我有数百万的表中的数据。

问题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:第一部分:必须分两步完成,首先选择唯一的名称-首先选择前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作为原始表名