问候,
如何在一个查询中执行两个UPDATE语句,例如:
UPDATE albums SET isFeatured = '0' WHERE isFeatured = '1'
Run Code Online (Sandbox Code Playgroud)
结合
UPDATE albums SET isFeatured = '1' WHERE id = '$id'
Run Code Online (Sandbox Code Playgroud)
基本上,当一个新专辑被推出时,之前推荐的专辑将切换回正常状态,并将新推出的专辑设置为活动状态.
谢谢!
试试这个:
UPDATE albums SET isFeatured = IF(id!='$id', '0','1')
Run Code Online (Sandbox Code Playgroud)
当你必须做这种事情时,它表明你的数据模型是错误的,可以做一些修复.
因此,我建议添加一个单独的表featured_albums(FK:int id_album)并使用它来确定相册是否有特色.
您的更新成为
DELETE FROM featured_album; INSERT INTO featured_album SET id_album = $id;
Run Code Online (Sandbox Code Playgroud)
选择加入表时
SELECT album.id,
album.name,
( id_album IS NOT NULL ) AS isfeatured
FROM album
LEFT JOIN featured_album ON id_album = album.id
Run Code Online (Sandbox Code Playgroud)
根据要求扩展以上基本上我建议添加一个表格,其中包含一行表示当前所选专辑.这是1对1的关系,即专辑表中的一个记录在feature_albums表中有一个相关记录.请参阅关系类型.

从相册表中删除isFeatured字段并添加新表.
CREATE TABLE `featured_album` (
`id_album` INTEGER NOT NULL,
FOREIGN KEY (id_album) REFERENCES `album` (`id`)
);
Run Code Online (Sandbox Code Playgroud)
该DELETE FROM.. INSERT INTO行通过创建表中的条目设置特色的专辑.
带有LEFT JOIN的SELECT语句将从专辑表中提取记录并从feature_album表中加入匹配的记录,在我们的例子中只有一个记录匹配,因为在feature_album表中有一个字段它将为所有人返回NULL特色专辑以外的唱片.
如果我们这样做了
SELECT album.id, album.name, featured_album.id_album as isFeatured0
FROM album
LEFT JOIN featured_album ON id_album = album.id
Run Code Online (Sandbox Code Playgroud)
我们会得到以下内容:
+----+----------------+------------+
| id | name | isFeatured |
+----+----------------+------------+
| 1 | Rumours | NULL |
| 2 | Snowblind | NULL |
| 3 | Telegraph road | 3 |
+----+----------------+------------+
Run Code Online (Sandbox Code Playgroud)
即isFeatured为NULL或ID.
通过添加( id_album IS NOT NULL ) AS isfeatured和使用我们得到的第一个查询
+----+----------------+------------+
| id | name | isfeatured |
+----+----------------+------------+
| 1 | Rumours | 0 |
| 2 | Snowblind | 0 |
| 3 | Telegraph road | 1 |
+----+----------------+------------+
Run Code Online (Sandbox Code Playgroud)
即isfeatured为0/1,这使得事物更具可读性,尽管如果你在PHP中处理结果,它对你的代码没有任何影响.
您可以使用CASE WHEN语句,并记住在必要时设置原始值(下面的 ELSE 子句)并根据需要排序 CASE 条件(在下面的语句中,如果请求 id 的行也有 isFeatured = 1,则 isFeatured 将为 0,要更改它,请交换 WHEN 子句)。
UPDATE albums
SET isFeatured = CASE
WHEN isFeatured = '1' THEN '0'
WHEN id = '$id' THEN '1'
ELSE isFeatured
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7647 次 |
| 最近记录: |