gpt4 book ai didi

php - SQL查询难度

转载 作者:行者123 更新时间:2023-11-29 06:10:31 25 4
gpt4 key购买 nike

有没有更简洁的方法来编写下面的代码?

$myQuery = "
SELECT * FROM `rooms`
WHERE (
`Facility1` IN ($inList)
OR `Facility2` IN ($inList)
OR `Facility3` IN ($inList)
OR `Facility4` IN ($inList)
OR `Facility5` IN ($inList)
OR `Facility6` IN ($inList)
OR `Facility7` IN ($inList)
OR `Facility8` IN ($inList)
OR `Facility9` IN ($inList)
) AND `Location` LIKE '".$Location."%'
AND `RoomType` LIKE '".$RoomType."%'
ORDER BY CONVERT(`Capacity`, SIGNED)
";

最佳答案

为了使其更加紧凑,您可以编写代码来为您构建查询:

$fac_array=array();
for ($i=1;$i<=9;$i++){
array_push($fac_array, "Facility$i in (\$inlist)");
}
$facility_condition = implode(" OR ",$fac_array);
$full_query = "SELECT * FROM rooms WHERE (".$facility_condition.") AND....";

但实际上,像您所展示的这样的查询的问题不在于代码,而在于数据模型的结构,该结构未“标准化”。

“数据库规范化是组织关系数据库的字段和表以最大限度地减少冗余和依赖性的过程。”。您有 9 个“设施”字段,这给您带来了三个问题(更不用说构建查询的难度):

  1. 如果您拥有超过 9 个设施,则需要更改数据库架构和所有查询。
  2. 如果有时每条记录使用的设施少于 9 个,那么您就是在浪费空间。
  3. 如果您更改设施信息,则必须检查数据库并更改包含该信息的每条记录中的数据。

这里的问题是“设施”本身应该是一个“实体”,因此应该包含在它自己的表中;其他表只是“引用”规范的设施表。这避免了我通过一些众所周知的关系数据库技术提到的问题。

我建议您阅读数据库规范化并考虑重新设计数据库的结构以符合设施表的要求,以及(正如我从查看查询中推断出您将需要的)一个“中间”facility_room 表,该表将设施映射到房间。

从这里开始:http://en.wikipedia.org/wiki/Database_normalization

这里:http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/

关于php - SQL查询难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9387510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com