我需要运行一系列查询,只有在前一个没有结果的情况下才运行下一个查询。
SELECT * FROM tbl WHERE a_id = "value" AND x_id = "samevalue" ORDER BY rand LIMIT 1;
仅在A_ID没有结果的情况下尝试使用B_ID
SELECT * from tbl WHERE b_id = "othervalue" AND x_id = "samevalue" ORDER BY rand LIMIT 1;
仅当B_ID没有结果时,请尝试使用X_ID
SELECT * from tbl WHERE x_id = "samevalue" ORDER BY rand LIMIT 1;
我正在尝试减少对数据库的调用次数和/或使用例如预处理语句来提高速度。
但是使用例如OR
SELECT * FROM tbl WHERE
(a_id = "value" AND x_id = "samevalue")
OR (b_id = "othervalue" AND x_id = "samevalue")
OR x_id = "samevalue" ORDER BY rand LIMIT 1;
将从一组所有匹配的OR语句返回一个随机匹配(例如,如果a_id和b_id都匹配)。
我的第一个想法是使用预准备语句加快多个查询,但是准备好的语句可以包含被忽略的列吗?
$mysqli->prepare("SELECT * FROM tbl (a_id, b_id, x_id) VALUES (?, ?, ?)");
然后绑定并运行查询,但我看不到它的工作,因为它需要所有三个变量,不是吗?并且在每个查询之前准备将毫无意义,因为每个查询只会运行一次。
我的mysql技能相当有限,而且我的谷歌技能在过去的2.5小时内也证明是无效的。
一些增加的业务逻辑:
文件将接收将由$ _GET提取的URI元素
- 接受的元素是:country(a_id),continent(b_id)和children(x_id)
- 如果不存在,则需要儿童,执行将停止
- 国家和大陆是可选的
如果设置了国家/地区:返回一个随机的人,其中country = a_id AND children = x_id
如果国家/地区查询未返回结果或国家/地区未设置且已设置大陆:则返回来自continent = b_id和children = x_id的随机人员
如果大陆查询未返回结果或国家/地区且未设置大陆:返回子项所在的随机人员= x_id