gpt4 book ai didi

php - 使用 USING 和 WHERE AND OR 选择左连接

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

我正在努力使用以下 sql 查询来显示 mysql 数据库的搜索结果

这有效

SELECT
*
FROM
lagerbestand
LEFT JOIN
verkaufspreis USING (materialnummer)
WHERE
lagerbestand.level='2' AND (lagerbestand.materialnummer='$suche' OR lagerbestand.materialkurztext LIKE '%$suche%')

这也有效

SELECT
*
FROM
lagerbestand
LEFT JOIN
verkaufspreis USING (materialnummer)
WHERE
lagerbestand.materialnummer='$suche' OR verkaufspreis.bezeichnung_fr LIKE '%$suche%'

但这行不通

SELECT
*
FROM
lagerbestand
LEFT JOIN
verkaufspreis USING (materialnummer)
WHERE
lagerbestand.level='2' AND (lagerbestand.materialnummer='$suche' OR verkaufspreis.bezeichnung_fr LIKE '%$suche%')

唯一的区别是最后一位。

lagerbestand.materialkurztext 更改为 verkaufspreis.bezeichnung_fr

然后脚本就会永远加载。

最佳答案

我将首先使用索引来加速查询。另外,如果不需要,请删除 2 中的引号:

SELECT *
FROM lagerbestand l LEFT JOIN
verkaufspreis v
USING (materialnummer)
WHERE l.level = 2 AND (l.materialnummer = '$suche' OR v.materialnummer LIKE '%$suche%');

对于此查询,您需要在 lagerbestand(level, bezeichnung_fr)verkaufspreis(materialnummer, bezeichnung_fr) 上建立索引。

我不能保证这会带来出色的性能,但这是一个起点。

编辑:

OR 可能很难针对查询进行优化。下一个想法是使用union all:

SELECT *
FROM lagerbestand l LEFT JOIN
verkaufspreis v
USING (materialnummer)
WHERE l.level = 2 AND l.materialnummer = '$suche'
UNION ALL
SELECT *
FROM lagerbestand l JOIN
verkaufspreis v
USING (materialnummer)
WHERE l.level = 2 AND (l.materialnummer <> '$suche' AND v.materialnummer LIKE '%$suche%');

这可能会更快,因为子查询可能会更有效地优化。您可以单独尝试每一项,看看是否仍然存在性能问题。

关于php - 使用 USING 和 WHERE AND OR 选择左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42537242/

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