我正在努力使用以下 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/