Mysql语法使用IN帮助!

时间:2010-03-21 22:22:54

标签: php mysql

我有一张图片表:pictures(articleid,pictureurl)

文章表:articles(id,title,category)

因此,简而言之,每篇文章都有一张图片,我使用articleid列将图片与文章相关联。现在我想在politic类别中选择5张文章图片。

我认为可以使用IN完成,但我无法弄清楚如何做到这一点。

注意:请只有一个查询,因为我可以先选择文章,然后再拍照。

由于

4 个答案:

答案 0 :(得分:2)

要从类别中的文章中获取五张图片,您可以这样做:

SELECT pictures.pictureurl
  FROM articles, pictures
 WHERE articles.id = pictures.articleid AND articles.category = 'politic'
 ORDER BY [your sort criteria]
 LIMIT 5;

您可以考虑稍微改写一下这个问题。

答案 1 :(得分:1)

如果您正在寻找IN查询而不是JOIN,这是Alex查询的替代方案:

SELECT pictureurl 
  FROM pictures 
  WHERE arcticleid IN (SELECT id FROM articles WHERE category='politic') 
  LIMIT 5

答案 2 :(得分:1)

重写以澄清(见评论):

如果您希望将JOIN标准与SELECT标准分开,可以编写如下内容:

SELECT pictureurl
FROM pictures
JOIN articles ON id = articleid
WHERE category LIKE 'politics'
ORDER BY RAND()
LIMIT 5

我发现它的意图稍微清楚一点,就像那样,也许只是我,但我遇到了以SELECT * FROM a, b, c形式编写的复杂查询,它在MySQL 4下工作,阻塞MySQL 5,而上述格式两者都可以。

此外,如果您使用统一ID列名称进行一致性,并且为了避免在更复杂的场景中混淆,您可以使用USING子句。因此,如果文章ID列也被命名为articlesid,则JOIN可以这样写:

SELECT pictureurl
FROM pictures
JOIN articles USING (articleid)
...

答案 3 :(得分:0)

您实际上不需要使用IN。当您嵌套查询或有一组已知值要检查时,IN会起作用。

politics类别中选择5张随机图片:

SELECT pictureurl FROM articles, pictures WHERE pictures.articleid = articles.id AND articles.category = 'politics' ORDER BY RAND() LIMIT 5