我有一个类似下面的表,目前没有rating
,lib_id
或votes
的值。
文库
id | title | year | rating | votes | lib_id |
---------------------------------------------
1 | book1 | 1999 | | | |
2 | book2 | 2010 | | | |
3 | book3 | 2009 | | | |
4 | book4 | 2007 | | | |
5 | book5 | 1987 | | | |
然后我有分类表,看起来像这样。
分类
id | title | year | rating | votes | lib_id |
---------------------------------------------
108 | book154 | 1929 | | | |
322 | book23 | 2011 | | | |
311 | book3 | 2009 | 9.3 | 4056 | 10876 |
642 | book444 | 2001 | | | |
533 | book567 | 1981 | | | |
可能会发生库表中的条目可能不会出现在分类表中,反之亦然。书的标题也可能不是唯一的。所以我想要做的是遍历库表中的每一行,取title
和year
列,转到classifications
表,找到具有这两个值的行,检索相应的rating
,votes
和lib_id
列,并更新库表中的条目。
我也想使用PDO。以下是我正在努力实现的非工作示例。
$update_vals_STH =
$DBH->prepare(
"UPDATE library SET lib_id=?, rating=?, votes=?
FROM (SELECT lib_id, rating, votes)
FROM classifications WHERE title=? AND year=?";
任何帮助将不胜感激。我对MySQL很陌生,并且一直在努力解决这个问题。
答案 0 :(得分:1)
您也可以在更新语句上连接表。
UPDATE library a
INNER JOIN classifications b
ON a.title = b.title AND
a.year = b.year
SET a.rating = b.rating,
a.votes = b.votes,
a.lib_id = b.lib_id
// WHERE clause // if you want to have extra condition.
<强>更新强>
为了获得更好的性能,您需要在以下字段中添加索引。
ALTER TABLE library ADD INDEX (title, year);
ALTER TABLE classifications ADD INDEX (title, year);