php - MySQL + PHP : select multiple rows on a join, 然后更新那些行/插入新行

标签 php mysql sql

我想做以下事情:

  1. 在两个表之间的 INNER JOIN 中选择多个行。
  2. 使用返回行的主键,或者:
    1. 更新那些行,或者
    2. 使用返回的主键作为外键将行插入到不同的表中。
  3. 在 PHP 中,输出步骤 #1 的结果,最好包含步骤 #2 的结果(供客户端使用)。

我已经编写了连接,但没有写太多其他内容。我尝试使用用户定义的变量来存储步骤 #1 中的主键以在步骤 #2 中使用,但据我了解,用户定义的变量是单值的,我的 SELECT 可以返回多行。有没有办法在单个 MySQL 事务中执行此操作?如果没有,是否有某种方法可以提高效率?

更新:以下是我关注的表的架构(名称已更改,'natch):

CREATE TABLE IF NOT EXISTS `widgets` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`author` varchar(75) COLLATE utf8_unicode_ci NOT NULL,
`text` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated` timestamp 
          NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `downloads` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`widget_id` int(11) unsigned NOT NULL,
`lat` float NOT NULL,
`lon` float NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

我目前正在做一个连接,让所有小部件与其下载配对。假设 $author$batchSize 是 php 变量:

SELECT w.id, w.author, w.text, w.created, d.lat, d.lon, d.date
FROM widgets AS w
INNER JOIN downloads AS d
ON w.id = d.widget_id
WHERE w.author NOT LIKE '$author'
ORDER BY w.updated ASC
LIMIT $batchSize;

理想情况下,我的查询会得到一堆小部件,更新它们的 updated 字段或插入一个引用该小部件的新下载(我很想看到这两种方法的答案,还没有决定一个yet),然后允许加入的小部件和下载被回显。如果回显中包含新插入的下载或更新的小部件,则可加分。

最佳答案

既然你问过你是否可以在单个 Mysql 事务中做到这一点,我会提到 cursors .游标将允许您进行选择并循环遍历每一行,并在数据库中执行插入或您想要的任何其他操作。因此,您可以创建一个存储过程来执行您可以通过 php 调用的所有幕后逻辑。

根据您的更新,我想提一下,您可以让存储过程返回新记录集或 I'd,任何您想要的。有关使用 php 创建返回记录集的存储过程的更多信息,您可以查看这篇文章:http://www.joeyrivera.com/2009/using-mysql-stored-procedure-inout-and-recordset-w-php/

关于php - MySQL + PHP : select multiple rows on a join, 然后更新那些行/插入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577772/

相关文章:

php - 将 fetch all 数组拆分为单独的数组

sql - SQL server IN 子句的奇怪行为

php - Android远程数据库连接使用PHP和JSON

php - JpGraph来自mysql数据的折线图

java - 无法更新远程 mysql 表

PHP/Wordpress - 根据纬度和经度查找最近的位置

php - MySQL 中的组合主键

php - 未定义索引 : file

mysql - 如何在 cPanel 上查看 MySQL 数据库的架构?

mysql - 使用多个联接格式化 RIGHT JOIN 查询