SELECT zlec_status.nazwa AS Status,
piorytet.nazwa AS Priorytet,
Concat(koord.imie, ' ', koord.nazwisko) AS `Koordynator`,
Concat(zlec_adresy.town, ' - ', zlec_adresy.street, ' ',
zlec_adresy.other)
AS `adres`,
zlec_z_dnia,zlec_id,
zlec_nr,
zlec_do,
zlec_ogran,
awizacje,
awizacja_na_dzien,
termin_zamkniecia,
tresc,
uwagi
FROM zlec
INNER JOIN koord
ON zlec.koord = koord.id
INNER JOIN zlec_adresy
ON zlec.zlec_addres = zlec_adresy.id
INNER JOIN piorytet
ON zlec.priorytet = piorytet.id
INNER JOIN zlec_status
ON zlec.status_zlecenia = zlec_status.id
WHERE `zlec_adresy`.`town` LIKE '%Sz%' LIMIT 0, 10
表格zlec_adresy
如下:
=============================
id | street | town | other
=============================
如您所见,整个地址部分有一个连续
Concat(zlec_adresy.town, ' - ', zlec_adresy.street, ' ',zlec_adresy.other)AS `adres`
开始 - 用户有一个带有地址查询的输入字段 - 因此他可以写出城镇名称或街道名称或其他条件。在我的代码中,只会通过。' town'的WHERE子句进行过滤。像用户输入一样。但是我怎样才能使它工作=> Where ||Concat(zlec_adresy.town, ' - ', zlec_adresy.street, ' ',zlec_adresy.other)AS
{ADRES {1}}
所以基本上它会过滤where语句的As || LIKE userinput
。这可能吗?或者还有另一种方法可以实现它。
答案 0 :(得分:1)
WHERE
Concat(zlec_adresy.town, ' - ', zlec_adresy.street, ' ',
zlec_adresy.other) like concat('%',@variable,'%')
答案 1 :(得分:1)
另一种可能更干净的方法是使用OR
:
WHERE
town like concat('%',@userinput,'%')
OR
street like concat('%',@userinput,'%')
OR
other like concat('%',@userinput,'%')
答案 2 :(得分:1)
您可以使用HAVING来解决您的问题。就像是 :
SELECT
name, CONCAT(street, ' ', town) AS address
FROM
zlec
WHERE
zlec.town like '%abc%'
HAVING address like '%xyz%'
答案 3 :(得分:1)
查询解剖结构如下所示:
from
,因为所有其他子句都依赖于它where
,以过滤掉不需要的行select
,因此您将获得所需的列请注意,我没有提到group by
,having
或order by
,因为它们不是您查询的一部分,因此这个解剖结构非常简单。这种简化的目的是为了达到清晰度。
现在,由于select
在where
之后运行,因此您无法使用select
中where
的重命名,因为where
是执行后,选择尚未执行。
所以你必须做一个解决方法:
- 您可以通过(select ...) mynewrelation
定义临时新关系并使用newrelation
的列重命名,但不建议这种情况。但是,了解此选项很有用,它可能在将来有用
- 你可以使用像Madhivanan建议的那样的东西,但是这个解决方案不是高效的,因为你正在进行非常慢的字符串操作来连接这些字段。因此,代码将清晰但缓慢
- Hanno Binder的解决方案要好得多,因为如果第一个操作数为真,它会使用or
不评估第二个操作数的好处。他的代码很快,但你不想看到它
我的建议:您应该定义stored function
来进行此计算。该存储函数应该等同于Hanno Binder建议的解决方案,您只需在查询中调用该函数即可。因此,您的源代码将清晰,易于阅读,正确且高效。