【问题标题】:All records not showing when using a WHERE statement with CONCAT将 WHERE 语句与 CONCAT 一起使用时未显示所有记录
【发布时间】: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


【解决方案1】:

您的问题可能是空白。

WHERE CONCAT(plantname, planttype, location, department) 
 LIKE '%001 Forklift Forklift Truck Preston Waste Disposal%' 

例如,找不到任何东西,因为连接的字符串导致'001 ForkliftForklift TruckPrestonWaste Disposal',而不是'001 Forklift Forklift Truck Preston Waste Disposal'

您希望子字符串之间有空格,这是使用CONCAT_WS 最容易实现的:

SELECT p.idplant, p.plantname, pt.planttype, l.location, d.department
FROM plant p
INNER JOIN planttypes pt ON pt.idplanttype = p.idplanttype1
INNER JOIN locations l ON l.idlocation = p.idlocation1
INNER JOIN departments d ON d.iddepartment = p.iddepartment1
WHERE CONCAT_WS(' ', p.plantname, pt.planttype, l.location, d.department) 
        LIKE '%001 Forklift Forklift Truck Preston Waste Disposal%' 

【讨论】:

  • 非常感谢,不得不稍微摆弄一下,但您对 _WS 的看法是正确的
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
相关资源
最近更新 更多