【发布时间】:2021-06-12 11:02:33
【问题描述】:
我有一个植物列表,可以使用 CONCAT 进行过滤,最初它只是文本,但我已将其转换为 ID。它显示了所有记录,并且可以在我转换为 ID 之前进行过滤。
这涉及 4 个表。 (带有示例数据)字段中没有使用“”,它们只是为了告诉您它是一个单词。
植物
idplant example 1
plantname example "001 Forklift"
idplanttype1 example 1
idlocation1 example 1
iddepartment1 example 1
植物类型
idplanttype example 1
planttype example "Forklift Truck"
位置
idlocation example 1
location example "Preston"
部门
iddepartment example 1
department example "Waste Disposal"
如果没有 WHERE 语句,它会显示所有记录,包括空值。 (但过滤器不起作用)
但是使用 WHERE 语句,它只显示完整的记录(所有这些都没有 Null 字段并且过滤器有效)不显示带有 null 的记录
问题似乎是 CONCAT。 (我已经清理了括号,但必须添加一个 1 以使 id 不同)
if(isset($_POST['search'])) {$valueToSearch = $_POST['valueToSearch'];}
$sql = "
SELECT idplant, plantname, planttype, location, department
FROM plant
LEFT JOIN planttypes ON idplanttype1 = idplanttype
LEFT JOIN locations ON idlocation1 = idlocation
LEFT JOIN departments ON iddepartment1 = iddepartment
WHERE CONCAT(plantname, planttype, location, department) LIKE
'%".$valueToSearch."%'
ORDER BY plantname";
解决方案 上面的代码有效,只是丢失了。
WHERE CONCAT_WS
我是 Joins 的新手,非常感谢任何帮助。
编辑:使用 Linux 服务器 - Apache 版本 2.4.46
提前致谢!
【问题讨论】:
-
plz,详细说明你想要什么样的记录?从你的问题来看,还不清楚。
-
请在每个表中提供您的数据示例
-
您应该从删除连接条件周围的所有无用括号开始,这将使阅读查询更容易。请为您正在使用的 DBMS 产品添加一个标签(Postgres,Oracle,...)。 Why should I tag my DBMS
标签: mysql join concatenation where-clause