1

我在数据库中有 2 个表:

$ SELECT * from image
+----------+------+-----+
| image_id | good | bad |
+----------+------+-----+
|        1 |    2 |   0 |
|        2 |    1 |   0 |
|        3 |    0 |   0 |
|        4 |    1 |   0 |

$ SELECT * from image_tag_map
+----------+--------+-------+
| image_id | tag_id | score |
+----------+--------+-------+
|        1 |      1 |   255 |
|        2 |      1 |   255 |
|        3 |      1 |   255 |
|        4 |      2 |   255 |

SELECT * FROM image_tag_map WHERE tag_id=$tagID and score>=5;
result : 1, 2, 3 (image_id)

SELECT * FROM image WHERE good!=0 ORDER BY good DESC;
result : 1, 2, 4 (image_id)

我想要 1, 2 结果。(所以这两个命令之间的混合)“image_id”在这两个地方。我尝试使用 INNER JOIN 等,但我找不到有用的东西......

4

7 回答 7

0

怎么样?

select image_id from image where good <> 0 and image_id in 
    (select image_id from FROM image_tag_map WHERE tag_id= ? and score>=5)
    order by good desc
于 2013-08-19T14:02:24.903 回答
0

除了使用JOIN,你还可以使用EXISTS

SELECT  a.*
FROM    image a
WHERE   a.good <> 0 AND
        EXISTS
        (
            SELECT  1
            FROM    image_tag_map b
            WHERE   a.image_id = b.image_id AND
                    tag_id = $tagID AND 
                    score >= 5
        )
ORDER   BY a.good DESC
于 2013-08-19T13:56:39.243 回答
0

JOIN两张表:

SELECT  *
FROM image AS i
INNER JOIN image_tag_map AS m ON i.image_id = m.image_id
WHERE m.tag_id=$tagID and m.score>=5
  AND i.good != 0
ORDER BY i.good DESC;
于 2013-08-19T13:57:32.900 回答
0

JOIN应该管用

SELECT * FROM image_tag_map itm 
JOIN image i ON i.image_id = itm.image_id 
WHERE itm.tag_id=$tagID 
AND itm.score>=5
AND i.good!=0
GROUP BY i.image_id
于 2013-08-19T13:57:37.403 回答
0

你试过这个吗?

SELECT distinct itm.image_id
FROM image_tag_map itm join
     image i
     on itm.image_id = i.image_id
WHERE item.tag_id=$tagID and item.score>=5 and i.good <> 0;
于 2013-08-19T13:58:17.933 回答
0

尝试

SELECT m.* FROM image_tag_map m 
  inner join image i on m.image_id = i.id 
   WHERE tag_id=$tagID and score>=5 and i.good !=0
于 2013-08-19T13:58:25.467 回答
0

你只需要身份证吗?有几种方法……</p>

SELECT image_id FROM image
WHERE good <> 0
AND image_id IN (
  SELECT image_id FROM image_tag_map
  WHERE tag_id = ? AND score >= 5
)

SELECT image_id FROM image
WHERE good <> 0
AND EXISTS (
  SELECT image_id FROM image_tag_map
  WHERE image_tag_map.image_id = image.image_id
  AND tag_id = ? AND score >= 5
)

使用 INNER JOIN 也应该有效:

SELECT image_id FROM image i
INNER JOIN image_tag_map itm
ON i.image_id = itm.image_id
WHERE i.good <> 0
AND itm.score >= 5
AND itm.tag_id = ?
于 2013-08-19T13:58:54.393 回答