我有很多用標籤「狗」標記的文章。我有一個新的標籤,現在叫做「貓」。我想將標籤「cat」添加到所有已有標籤「dog」的文章中。一些文章有兩個標籤。我不想用「貓」來代替這些。如何將所有這些MySQL查詢合併爲一個?
換句話說,如果一篇文章有標籤「狗」,但還沒有標籤「貓」,我想給它添加標籤「貓」。這裏是我寫的腳本:
<?php
# Get "cat" tag id
$sql = "SELECT `id`
FROM tags
WHERE name = 'cat'
LIMIT 1";
$cat_tag = mysql_fetch_assoc(mysql_query($sql));
# Get "dog" tag id
$sql = "SELECT `id`
FROM tags
WHERE name = 'dog'
LIMIT 1";
$dog_tag = mysql_fetch_assoc(mysql_query($sql));
######################################
# Get all nodes tagged with "dog"
$sql = "SELECT `node_id`
FROM node_tags
WHERE `tag_id` = '" . $dog['id'] . "'";
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)) {
# Check to see if current node has "cat" tag already
$sql = "SELECT COUNT(*)
FROM node_tags
WHERE `node_id` = '" . $row['node_id'] . "'
AND `tag_id` = '" . $cat['id'] . "'";
$check_already_exists = mysql_fetch_assoc(mysql_query($sql));
# If node doesn't already have "cat" tag, then add it
if($check_already_exists == '0') {
$sql = "INSERT INTO `node_tags`(node_id, tag_id)
VALUES('" . $row['node_id'] . "', '" . $cat['id'] . "')";
mysql_query($sql);
}
}
?>
我希望能夠直接從我的MySQL管理器工具運行。所以它不能有任何PHP,但應該是一個大的SQL查詢。這個怎麼做?
我相當肯定這是行不通的,因爲你試圖讀取並在同一時間從'node_tags'寫。 – 2012-08-17 17:24:51
@Kinkink。 。 。這不是我經歷過的限制。你有文件嗎?應該運行的方式是首先運行「select」,然後插入行。事實上,Mysql 5.5文檔明確指出這是可能的(http://dev.mysql.com/doc/refman/5.5/en/insert-select.html)。 – 2012-08-17 17:29:10
我只是嘗試了一個簡單的'插入到x(y)從x'中選擇y + 10並且得到了「Can not reopen x」錯誤消息。 - 編輯沒關係,我的'x'是一個臨時表,這是不允許的。 – 2012-08-17 17:30:26