[英]MYSQL Match Entries that Meet Multiple Criteria over Multiple Rows
我認為這對於很多使用MYSQL的人來說是個簡單的選擇,但我只是不太了解...主要是因為不知道要搜索的術語是否正確。
基本上,我有一個將標簽ID映射到照片ID的表格,稱為tag_map。 當我執行此查詢時:
SELECT * FROM tag_map WHERE tag_id='1' OR tag_id='5';
我得到以下結果:
ph_id tag_id
1 1
2 1
5 1
7 5
8 1
9 5
10 5
11 1
12 1
13 1
但是我真正想要的是僅選擇同時具有tag_id為'1'和'5'的ph_id。
因此,您可能會看到,我正在嘗試根據多個標簽過濾選擇。 我要結束於:
ph_id tag_id
7 1
7 5
8 1
8 5
11 1
11 5
因此ph_id 7、8和11引用了tag_id 1和5。
希望有道理。
謝謝。
由於查詢的動態性質(用戶選擇任意數量的可用標簽以“縮小選擇范圍”),我采用了PHP解決方案,如@YU NO WORK所建議
基本上我從表'tags'中獲得所有選定標簽的tag_id
然后,我從表tag_map中選擇了所有映射到所選tag_id的照片id(ph_id)。
然后,我將其減少為ph_id,該ph_id與選定標簽的發生次數相同:
$numTags = count($arTagId); //$arTagId is an array of the selected tags
// get only photo ids that match both tags
$arPhId = array();
// in arPhId, find ph_ids that have occurances equal to $numTags
$arPhIdCnt = array_count_values($arPhIdAll); //$arPhIdAll is array of all ph_id that match all selected tag_ids
foreach($arPhIdCnt as $pid => $pidQty) {
if($pidQty == $numTags) {
$arPhId[] = $pid;
}
}
因此,我最終得到一個僅包含與兩個tag_id匹配的ph_id的數組。
感謝大家的幫助。
您將不得不將表與自身連接起來,代碼可能會有些復雜。 PHP將是一個更容易的解決方案,但不是一種高效的解決方案。
您必須基於ph_id將表與其自身連接,然后檢查table1實例的tab_id col等於1以及table2實例的tab_id等於5。
SELECT t1.* FROM tag_map t1, tag_map t2
WHERE t1.ph_id = t2.ph_id
AND t1.tag_id='1'
AND t2.tag_id='5';
如果願意,可以使用內部聯接
SELECT t1.* FROM tag_map t1
INNER JOIN tag_map t2 on t2.ph_id=t1.ph_id
WHERE t1.tag_id='1'
AND t2.tag_id='5';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.