gpt4 book ai didi

php - 如何在 PHP/MySQL 中替换重复项?

转载 作者:行者123 更新时间:2023-11-29 18:24:55 24 4
gpt4 key购买 nike

我有一个书籍和作者的数据库,但我得到的数据库有重复的作者出现多次。当存在重复项时,我想用 min(id_author) 替换 Written 表中的 fk_id_author。

以下是三个表(针对示例进行了简化):

作者

  • id_author

  • 作者姓名

预订

  • id_book

  • 书名

书面(一个作者可以写n本书,一本书可以由n个作者写)

  • fk_id_book

  • fk_id_author

我已提出请求,查找在“作者”表中多次出现的作者及其所写书籍的 id 和 id:

SELECT MIN w.fk_id_book, w.fk_id_author, d.author_name, d.nb_written
FROM Written_by w
JOIN (SELECT c.id_author, c.author_name, b.nb_written
FROM Author c
JOIN (SELECT MIN(a.id_author), a.author_name, COUNT( a.author_name)
nb_written
FROM Author a
GROUP BY a.author_name
HAVING nb_written >1) b
ON (c.author_name = b.author_name)
ORDER BY c.author_name ASC) d
ON w.fk_id_author = d.id_author)
GROUP BY w.fk_id_author
ORDER BY d.author_name ASC, w.fk_id_author ASC

结果是:

fk_id_book ; fk_id_author ; author_name  ; nb_written
80 ; 18 ; Rousseau ; 3
175 ; 127 ; Rousseau ; 3
1307 ; 150 ; Rousseau ; 3
127 ; 302 ; Voltaire ; 2
1503 ; 927 ; Voltaire ; 2

问题:

我想获取同一行中同名但不同 id 的作者所写的 fk_id_book 列表:

list of fk_id_book ; min(fk_id_author) ; author_name  ; nb_written
80,175,1307 ; 18 ; Rousseau ; 3
127,1503 ; Voltaire ; 2

在 MySQL 中可以吗?

然后使用 PHP,我将 fk_id_book 80,175,1307 列表的 Written 更新为 fk_id_author 18。

最佳答案

我的问题是重复的。解决办法如下:

1更新fk_id_author

update  written
join author a1
on a1.id_author = written.fk_id_author
set written.fk_id_author =
(
select min(a2.id_author )
from author a2
where a2.author_name = a1.author_name
)

2 删除没有书面条目的作者:

DELETE FROM author 
WHERE id_author NOT IN (
SELECT DISTINCT fk_id_author
FROM written
)

关于php - 如何在 PHP/MySQL 中替换重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46279100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com