以下db结构:
表cms_pages包含带有id,name,title等的页面
表cms_pagerows包含具有cms_page_id和等级
的行
(cms_page_id上的唯一索引,等级)
Pagerow应该包含cols,而cols又包含...... content。
我现在想要使用php在现有页面上的cms_pagerows中插入一个新的pagerow
由于删除了旧的分页,等级不一定是连续的数字
为此,我有一个函数insertRowAt($ page_name,$ offset),带有以下SQL:
INSERT INTO `cms_pagerows` (`cms_page_id`, `rank`)
SELECT `cms_pages`.`id`, `cms_pagerows`.`rank` + 1
FROM `cms_pages`, `cms_pagerows`
WHERE `cms_pages`.`name` = "'.$page_name.'"
AND `cms_pagerows`.`cms_page_id` = `cms_pages`.`id`
ORDER BY `rank` DESC
LIMIT 0, "'.$offset.'"
ON DUPLICATE KEY UPDATE `cms_pagerows`.`rank` = `cms_pagerows`.`rank` + 1
尝试运行时,我收到以下错误消息:“字段列表中的列'cms_pagerows.rank'不明确”
答案 0 :(得分:0)
试试这个..
INSERT INTO `cms_pagerows` (`cms_page_id`, `rank`)
SELECT `cms_pages`.`id`, `cms_pagerows`.`rank` + 1 AS rank1
FROM `cms_pages`, `cms_pagerows`
WHERE `cms_pages`.`name` = "'.$page_name.'"
AND `cms_pagerows`.`cms_page_id` = `cms_pages`.`id`
ORDER BY rank1 DESC
LIMIT 0, "'.$offset.'"
ON DUPLICATE KEY UPDATE `rank` = rank1 + 1
两个rank
字段存在冲突,因为您使用相同的名称...使用AS
的{{1}}关键字..
答案 1 :(得分:0)
关键是始终使用表别名来消除列的歧义:
INSERT INTO `cms_pagerows`(`cms_page_id`, `rank`)
SELECT p.`id`, pr.`rank` + 1
FROM `cms_pages` p join
`cms_pagerows` pr
on pr.`cms_page_id` = p.`id`
WHERE p.`name` = "'.$page_name.'"
ORDER BY pr.`rank` DESC
LIMIT 0, "'.$offset.'"
ON DUPLICATE KEY UPDATE `rank` = pr.`rank` + 1;
你也可以说:
ON DUPLICATE KEY UPDATE `rank` = VALUES(`rank`)
这是有效的,因为select
已经要插入正确的等级,所以你可以使用该值。