2

所以我有两个看起来像这样的表:

如下

follower   |   following
-----------+-------------
1          |   2
-----------+-------------
1          |   3
-----------+-------------
2          |   1
-----------+-------------
1          |   4         
-----------+-------------

(这基本上是包含哪个用户在网站上关注哪个用户的表格......数字是用户 ID)

文章

id    |    title    |   writer
------+-------------+---------
1     |    a test   |   2      
------+-------------+---------
2     |    testing  |   3     
------+-------------+---------
3     |    another  |   2     
------+-------------+---------
4     |    again    |   4
------+-------------+---------

id是一个自动增量字段..title包含文章的标题..writer包含编写它的用户的 id)

现在我有一个如下所示的 mysql查询

SELECT * FROM follows f INNER JOIN articles a ON f.following = a.writer WHERE f.follower = 1 ORDER BY a.id DESC LIMIT 4, 2;

但是我没有得到任何结果 ,我想从表中取出 2 篇文章,它们的idSMALLER 比 4 小。这就是为什么我试图放一个DESCbefore LIMIT

(所以我想获得具有id2 和 3 的文章。)

但它不起作用。我怎么能这样做?请帮忙!谢谢!

4

3 回答 3

2

我想从表中取出 id 小于 4 的 2 篇文章

然后试试这个:

SELECT *
FROM follows f 
INNER JOIN
(
     SELECT *
     FROM articles
     WHERE id > 1 
        OR id < 4
) a ON f.following = a.writer
WHERE f.follower = 1
ORDER BY a.id

或者:

SELECT *
FROM follows f 
INNER JOIN articles a ON f.following = a.writer
WHERE f.follower = 1 
  AND (a.id > 1 OR a.id < 4 )

ORDER BY a.id
于 2012-10-31T11:11:53.127 回答
2

LIMIT在查询中使用错误。您的查询返回4 行,其中包含您关注的作者撰写的所有文章,按 article.id 降序排序。但是您LIMIT 4, 2正在跳过前 4 行,然后返回前 2 行。由于只找到 4 行,因此您的结果为空。

你的结果排序正确,所以如果你想要最后两篇文章,你需要选择前两行

SELECT * 
FROM 
  test_follows f INNER JOIN test_articles a ON f.following = a.writer 
WHERE 
  f.follower = 1
ORDER BY 
  a.id DESC 
LIMIT 2
于 2012-10-31T12:27:12.587 回答
1

不确定这是否是你想要的……试试这个。

mysql_query("SELECT * FROM follows f INNER JOIN articles a ON f.following = a.writer WHERE f.follower = 1  and a.id < 4 ORDER BY a.id ");

如果得到文章。id 小于(小于)4 希望这会有所帮助。

于 2012-10-31T11:12:32.750 回答