[英]Mysql syntax using IN help!
我有一张图片表: pictures(articleid,pictureurl)
和articles表: articles(id,title,category)
因此,简要地说,每篇文章都有图片,我使用articleid
列将图片与文章链接起来。 现在我想从politic
类别中选择文章的5张图片。
我认为可以使用IN来完成,但我不知道该怎么做。
注意:请只查询一个,因为我可以通过先选择文章然后获取图片来做到这一点。
谢谢
要从某个类别的文章中获取五张图片,您可以执行以下操作:
SELECT pictures.pictureurl
FROM articles, pictures
WHERE articles.id = pictures.articleid AND articles.category = 'politic'
ORDER BY [your sort criteria]
LIMIT 5;
您可以考虑改一下这个问题。
如果您要查找IN
查询而不是JOIN
这是Alex查询的替代方法:
SELECT pictureurl
FROM pictures
WHERE arcticleid IN (SELECT id FROM articles WHERE category='politic')
LIMIT 5
为澄清起见进行了重写(请参阅评论):
如果您希望将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
子句。 因此,如果articles ID列也命名为articlesid,则JOIN可以这样写:
SELECT pictureurl
FROM pictures
JOIN articles USING (articleid)
...
您实际上不需要为此使用IN
。 当您嵌套查询或要检查一组已知值时, IN
服务。
要在politics
类别中选择5张随机图像:
SELECT pictureurl FROM articles, pictures WHERE pictures.articleid = articles.id AND articles.category = 'politics' ORDER BY RAND() LIMIT 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.