压缩仅在先前查询没有结果时运行的多个mysql查询

时间:2017-03-01 05:18:46

标签: php mysql mysqli

我需要运行一系列查询,只有在前一个没有结果的情况下才运行下一个查询。

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

0 个答案:

没有答案