【发布时间】:2011-07-29 14:09:34
【问题描述】:
嘿,我不确定这是不是问这个问题的正确地方,但我的脚本遇到了问题。我正在尝试使用 PHP 进行一些数据库合并,一次合并。我正在做的是获取一本书的所有唯一标题的列表,然后通过这些标题查找具有该标题的书籍并按类型分组,然后通过该结果查找具有该唯一标题和类型的书籍,重复该过程版权和出版商。主要问题是mysql服务器超时需要很长时间。有没有更好的方法来做到这一点,可能使用 SQL?
合并的一个例子是这样的:
INSERT INTO books (1, 'Some Book', 'Penguin Publishing', '2005', 1);
INSERT INTO books (2, 'Some Book', 'Penguin Publishing', '2005', 1);
INSERT INTO books (3, 'Some Book 2', 'Penguin Publishing', '2005', 1);
INSERT INTO books (4, 'Some Book 2', 'Lion Publishing', '2005', 1);
INSERT INTO books (5, 'Some Book 2', 'Penguin Publishing', '2005', 2);
INSERT INTO books (6, 'Some Book 2', 'Penguin Publishing', '2005', 2);
INSERT INTO books (7, 'Somebody', 'Lion Publishing', '2005', 1);
INSERT INTO books (8, 'Somebody', 'Lion Publishing', '2007', 1);
INSERT INTO books (9, 'Somebody', 'Penguin Publishing', '2005', 1);
ID 的 1 和 2 应该加入,因为他们有 1) 相同的标题 2) 相同的 material_type_id 3) 相同的版权和 4) 相同的出版商。
有什么方法可以使用 PURE SQL 或次要 PHP 来实现这一点?
这是我的数据结构:
CREATE TABLE books (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
publisher varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
copyright varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
material_type_id int(11) DEFAULT NULL
PRIMARY KEY (id),
FULLTEXT KEY title (title)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
编辑 我想我忘了提一些非常重要的事情。我不能只使用 GROUP 查询,因为我需要使用 id。我有另一个名为“项目”的表,其中包含字段 book_id。如果我只是对记录进行分组,我最终会得到孤立的项目。我需要的是一种分解订单查询的方法,所以我最终得到这样的结果:
id | title | publisher | copyright | material_type_id
-----------------------------------------------------
1 'Some Book' 'Penguin Publishing' '2005' 1
2 'Some Book' 'Penguin Publishing' '2005' 1
-----------------------------------------------------
5 'Some Book 2' 'Penguin Publishing' '2005' 2
6 'Some Book 2' 'Penguin Publishing' '2005' 2
-----------------------------------------------------
3 'Some Book 2' 'Penguin Publishing' '2005' 1
-----------------------------------------------------
因为我可以在第一组上运行这样的查询:
UPDATE items SET book_id = 1 WHERE book_id IN (1, 2)
我希望这是有道理的。我真的很难解释。感谢您的帮助和耐心。
【问题讨论】:
-
那么您只是想删除重复的条目(所有字段都相同)吗?我记得我的一位老师总是说尽可能让数据库做繁重的工作,所以我会推荐直接 sql(如果可能的话)。
-
您需要发布源表结构以供任何人回答如何在 SQL 中执行此操作。