[英]Combine 3 MySQL queries to make 1 query
我正在嘗試在我的網站中構建搜索功能。 如果我想搜索照片的標題,文字或標簽是否包含“黑色”這個詞,我有以下3個查詢:
SELECT id
FROM photos
WHERE title LIKE '%black%'
AND status = 'A'
SELECT id
FROM photos
WHERE text LIKE '%black%'
AND status = 'A'
SELECT DISTINCT(photos.id)
FROM photos, photo_tags, tags
WHERE tags.tag LIKE '%black%'
AND photo_tags.keyid = tags.id
AND photos.id = photo_tags.catid
AND photos.status = 'A'
是否可以將所有這些組合成1個查詢? 我知道我可以加入第一個2但是將它與第三個相結合對我來說似乎太復雜了。 我嘗試加入OR,但我不認為我做得對。
此外,我希望它沒有重復的結果,所以如果一張照片的標題為“黑色”,標簽為“黑色”,它只會出現一次。
BTW表格看起來像這樣,keyid與tag.id有關,catid與photos.id有關
photos
+----+-----------+-----------------+
| id | title | text |
+----+-----------------------------+
| 1 | blue pic | black and blue |
| 2 | red pic | red and green |
| 3 | green pic | green and white |
| 4 | white pic | white and black |
| 5 | black pic | black and gold |
+----+-----------+-----------------+
tags
+----+-------+
| id | tag |
+----+-------+
| 1 | blue |
| 2 | table |
| 3 | chair |
| 4 | red |
| 5 | black |
+----+-------+
photo_tags
+-------+-------+
| keyid | catid |
+-------+-------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 5 |
+-------+-------+
您似乎應該加入表格,然后根據您在兩個表格中查找的文本進行過濾:
SELECT DISTINCT p.id FROM photos p
JOIN photo_tags pt ON pt.cat_id = p.id
JOIN tags t ON pt.key_id = t.id
WHERE (p.title LIKE '%black%' OR t.tag LIKE '%black%') AND p.status = 'A'
First statement could be your answer. Not sure if you are looking for below output:-
ysql> SELECT DISTINCT(photos.id) FROM photos, photo_tags, tags WHERE tags.tag L
IKE '%black%'AND photos.title LIKE '%black%' AND photo_tags.keyid = tags.id AND
photos.id = photo_tags.catid;
+------+
| id |
+------+
| 5 |
+------+
1 row in set (0.05 sec)
mysql> SELECT id
-> FROM photos
-> WHERE title LIKE '%black%' ;
+------+
| id |
+------+
| 5 |
+------+
1 row in set (0.08 sec)
mysql> SELECT id
-> FROM photos
-> WHERE text LIKE '%black%';
+------+
| id |
+------+
| 1 |
| 4 |
| 5 |
+------+
3 rows in set (0.00 sec)
mysql> SELECT DISTINCT(photos.id)
-> FROM photos, photo_tags, tags
-> WHERE tags.tag LIKE '%black%'
-> AND photo_tags.keyid = tags.id
-> AND photos.id = photo_tags.catid ;
+------+
| id |
+------+
| 5 |
+------+
1 row in set (0.05 sec)
mysql> SELECT DISTINCT(photos.id) FROM photos, photo_tags, tags WHERE tags.tag L
IKE '%black%'AND photos.title LIKE '%black%' AND photo_tags.keyid = tags.id AND
photos.id = photo_tags.catid;
+------+
| id |
+------+
| 5 |
+------+
1 row in set (0.05 sec)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.