簡體   English   中英

將多個查詢合並為一個查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM