[英]Combining multiple queries into a single one
我有一個簡單的查詢:
SELECT t1.tbl,
t1.slug
FROM t1
WHERE tags = '%".$tag."%'
但是,我需要使用其他表(t2、t3、t4 和 t5)中的數據來擴充我的結果。 例如,如果t1.tbl = 't2'我需要添加:
SELECT t2.title
FROM t2
WHERE t2.county = '".$county."'
我可以這樣加入:
LEFT JOIN ON (t1.rid = t2.id)
在每個表中,即使列的名稱不同,我也會按 $county 進行過濾。
我試過這樣的事情:
SELECT t1.tbl,
t1.slug
FROM t1 A
LEFT JOIN (
SELECT title
FROM t2 B
WHERE A.tbl = 't2'
) ON (A.rid = B.id)
WHERE A.tags = '%".$tag."%'
有沒有辦法將所有這些組合成一個查詢?
SELECT A.tbl,
A.slug,
COALESCE(B.title, C.title) AS title
FROM t1 A
LEFT JOIN t2 B
ON A.tbl = 't2' AND A.rid = B.id AND B.county = ?
LEFT JOIN t3 C
ON A.tbl = 't3' AND A.rid = C.id AND C.region = ?
WHERE A.tags LIKE ?
AND COALESCE(B.id, C.id) IS NOT NULL;
最后一個條件是僅返回 A 中在其中一個連接表中匹配的行。
我認為這足以看到模式,因此您可以添加更多表格。
我敦促您學習使用查詢參數,而不是將變量直接連接到 SQL 字符串中。 如果您使用查詢參數,則更容易編寫代碼並且更安全地避免 SQL 注入漏洞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.