我在数据库上运行选择查询时遇到一些问题。一些数据以逗号分隔值的列表形式保存,例如:
Table: example_tbl
| Id | People | Children |
| 1 | 1,2,3 | 8,10,3 |
| 2 | 7,6,12 | 18,19,2 |
我正在尝试运行的示例:
<?php
include 'class.php';
$selection = 1;
$db = new DbClass;
$tbl_name = 'example_tbl';
$sql = "SELECT * FROM $tbl_name WHERE ".$selection." IN People";
$result = $db->query($sql);
$print_r($result);
?>
上面的脚本should在“人员”列中找到“1”后返回第 1 行,但显然我已经把它搞砸了。
我遇到的问题是我认为 IN 语句向后,即我认为如果 $selection 是逗号分隔(内爆)列表,则此方法将选择值,而不是我尝试使用它的方式。
我不知道我从上面的 db 类发送和接收的内容是否太重要,但如果您想知道,它只是一个简单的脚本,运行所有相关位并返回结果数组。目前它没有返回任何内容,因为它没有找到匹配项
预先感谢您能告诉我的任何事情。
干杯
-戴夫
为什么人们坚持在列中使用逗号分隔数据值的这种疯狂习惯,而不是正确规范他们的数据库设计。它always导致问题。
SELECT *
FROM $tbl_name
WHERE CONCAT(',',People,',') LIKE '%,".$selection.",%'";
or
SELECT *
FROM $tbl_name
WHERE FIND_IN_SET(".$selection.",People);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)