我的网页上有“页面/文章”存储在MySQL数据库中。它还具有为不同页面显示不同侧面菜单的功能。所有这些(菜单,菜单项)都存储在DB中。
这是我获取当前页面所有菜单项的SQL:
SELECT *
FROM menu_items
JOIN pages
ON menu_items.menu_id=pages.right_menu_id
WHERE pages.link = "some_link"
它有效。
我想要的是,当此查询返回空集时,执行另一个查询并获取其结果。可能吗 ??如果上面提到的查询为空,我想获得此查询的结果:
SELECT *
FROM menu_items
WHERE menu_id=2;
是否可以,或者我应该在PHP中使用它?
答案 0 :(得分:2)
您可以使用EXIST函数来测试当前页面是否有任何链接:
IF EXISTS(SELECT menu_id FROM menu_items JOIN pages ON menu_items.menu_id = pages.right_menu_id WHERE pages.link = "some_link") THEN
SELECT *
FROM menu_items
JOIN pages
ON menu_items.menu_id=pages.right_menu_id
WHERE pages.link = "some_link"
ELSE
SELECT *
FROM menu_items
JOIN pages
ON menu_items.menu_id=pages.right_menu_id
WHERE menu_id = 2
END IF
你也可以尝试这样的事情:
DECLARE @LinkCount INT
SELECT @LinkCount = COUNT(*) FROM menu_items JOIN pages ON menu_items.menu_id = pages.right_menu_id WHERE pages.link = "some_link"
SELECT *
FROM menu_items
JOIN pages
ON menu_items.menu_id=pages.right_menu_id
WHERE (@LinkCount > 0 AND pages.link = "some_link") OR (@LinkCount = 0 AND menu_id = 2)
这可能有更优雅的方式,但希望这会有所帮助。
答案 1 :(得分:2)
也许这不是最优雅的方式:
SELECT *
FROM
menu_items
JOIN pages ON menu_items.menu_id = pages.right_menu_id
WHERE pages.link = "some_link"
UNION ALL
SELECT *, NULL, NULL, NULL
FROM menu_items
WHERE
menu_id = 2 AND
NOT EXISTS (
SELECT *
FROM
menu_items
JOIN pages ON menu_items.menu_id = pages.right_menu_id
WHERE pages.link = "some_link"
)
注意:NULL的数量应与表页面中的列数相同。