1
我有以下查詢其完美的作品:寫的MySQL查詢連接三個表
SELECT *
FROM contacts
WHERE id in (
SELECT DISTINCT contacts.id
FROM contacts
INNER JOIN contacts2tags
ON contacts.id = contacts2tags.contactid
WHERE tagid in(7,4)
)
這裏接觸表包含ID,名字,姓氏,..和標籤表包含ID,名稱。 contacts2tags表中包含的ContactID和標籤識別哪些是相同contacts.id和tags.id分別
現在,我要的是,以僅顯示其有接觸既有標籤識別7和標籤識別4 我試着像這樣:
SELECT *
FROM contacts
WHERE id IN
(
SELECT CT1.contactid
FROM
tags T1, contacts2tags CT1, tags T2, contacts2tags CT2
WHERE CT1.contactid = CT2.contactid
AND CT1.tagid = T1.id
AND CT2.tagid = T2.id
AND (T1.id = 7 AND T2.id = 4)
它也可以。 我的問題是,我想將上面的第二個查詢轉換爲使用內部連接的查詢。 我有一個存儲在$ tmp中的php數組,我在php 中使用這些ID併爲它們寫上面的查詢。 我該怎麼做?我不熟悉sql。可能是一個非常簡單的問題。 在此先感謝
編輯: 回答下面的問題解決了。但是sql對於10k條記錄運行非常緩慢。任何建議來優化它?按照答案中給出的方式粘貼更新後的查詢。
SELECT c.id
FROM contacts c
inner join contacts2tags t on c.id = t.contactid
where t.tagid in (7,4)
group by c.id
having count(distinct t.tagid) = 2
感謝lot.it工程:)所以,現在我可以包括我的數組$ tmp目錄中的所有元素在(...),並使用sizeof的值($ tmp)? – user415
是的,然後你必須在'having'子句中調整數字。 –
沒錯。謝謝! – user415