Php 使用PDOs使用另一个表中的值更新MySQL行
我有一个类似下面的表格,目前没有Php 使用PDOs使用另一个表中的值更新MySQL行,php,mysql,sql,sql-update,Php,Mysql,Sql,Sql Update,我有一个类似下面的表格,目前没有评级、lib_id或投票的值 库 id | title | year | rating | votes | lib_id | --------------------------------------------- 1 | book1 | 1999 | | | | 2 | book2 | 2010 | | | | 3 | book3 | 2009 | |
评级
、lib_id
或投票
的值
库
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 | | | |
库表中的条目可能不会出现在分类表中,反之亦然。书的标题也可能不是唯一的。因此,我要做的是遍历库表中的每一行,取标题
和年份
列,转到分类
表,找到具有这两个值的行,检索相应的评级
,投票
和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的新手,已经为这个问题挣扎了一段时间。您也可以在update语句中加入表
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);
谢谢你的回答。不幸的是,这似乎对我不起作用。当我运行查询时,它会一直运行。我在10分钟后停止了脚本,表没有任何变化。也许我应该提到我的库表是9000行,分类表大约是260000行。这会对查询产生影响吗?@garethdn它正在工作,但执行的
全表扫描却很糟糕。您需要在列上添加索引,请稍候,我将更新答案:)如果索引没有提高性能,请提供一些反馈。效果很好,查询现在只需要大约2秒钟。再次感谢如果您想在一个SQL查询中执行此操作,而不需要编码和在行上循环,那么您肯定不需要?
运算符,因为它只用于绑定应用程序逻辑中的值,而不是数据库中的值。