请给我解释这个简短的SQL查询

时间:2010-08-20 15:05:33

标签: sql

 "SELECT * from posts A, categories B where A.active='1' 
  AND A.category=B.CATID order by A.time_added desc 
  limit $pagingstart, $config[items_per_page]";

我认为它说从'posts'表中选择行,这样每行中的活动条目等于1但我不理解其余的。请解释。谢谢。

9 个答案:

答案 0 :(得分:4)

它从帖子中选择列(用别名“A”表示),并为每个帖子选择与类别(称为“B”)相关联的列,其中:

  • Posts.Active = 1
  • 帖子的类别存在于“类别”表中(如果帖子在此表中没有匹配的类别,则不会返回该行)
  • 按A.Time_added排序结果(按降序排列,最新到最旧)
  • 返回“$ config [items_per_page]”行,以“$ pagingstart”开头

我不确定这是什么牌子的SQL,因为我不认识限制语句或$变量,但这就是要点。

答案 1 :(得分:1)

你会得到行

    来自A和B的
  • 类别和CATID匹配的位置(维恩图的“交叉点”)

  • A的行被过滤为Active = 1

  • 的行
  • 按time_added排序。最新的

  • limit表示第x行的y行startig。 x和y由排序

  • 决定

答案 2 :(得分:1)

posts A, categories B就是所谓的“隐式JOIN”。它会返回AB的所有可能记录组合,这些记录稍后会被WHERE条件过滤。

显式连接语法更具可读性:

SELECT  *
FROM    posts A
JOIN    categories B
ON      B.CATID = A.category
WHERE   A.active='1' 
ORDER BY
        A.time_added DESC
LIMIT   $pagingstart, $config[items_per_page]

这意味着:“对于A中的每条记录,请记录Bcatid类别相同的A的所有记录。

ORDER BY A.time_added DESC让您的帖子从最新到最早返回。

LIMIT 100, 10使查询仅返回从100th110th的帖子。

答案 3 :(得分:0)

看起来这是尝试选择所有活动的帖子,在顶部订购最新的帖子,并限制适合页面的记录数量。 A.active='1' 的语义可能意味着帖子是活跃的,但我猜是。

用PHP看起来像MySQL。

答案 4 :(得分:0)

这会从postscategories中选择条目,并将posts.category=categories.CATID加在一起。它会过滤掉posts.active!=1的所有行,然后按posts.time_added降序排序,最多从$config[items_per_page]开始返回$pagingstart项。

答案 5 :(得分:0)

它首先选择所有活动帖子(及其类别)。但是,它具有分页机制,因此它仅显示从$config[items_per_page]开始的$pagingstart个帖子。

答案 6 :(得分:0)

从posts表和categories表中选择行,按类别ID加入单个表(使用我称之为懒惰的连接,但这可能只是我的意见,我不是真正的数据库人) ,按添加时间的降序排序,仅显示$ pagingstart开头的$ items_per_page记录。

答案 7 :(得分:0)

它选择表帖子和类别中的所有列,其中posts.active等于1,其中 posts.category加入categories.catid ,这是按posts.time_added排序的限制开始和end由两个变量$ pagingstart,$ config [items_per_page]

设置

答案 8 :(得分:0)

它说:

1)从Posts&中选择所有内容Categories其中Posts.Active = 1Posts.Category = Category.CATID
2)Order by语句然后指定它们应该首先显示(从上到下)最新的Post.Time_Added
3)最后,limit子句说(我认为,我不经常使用limit):只抓取$spagingstart(某个点已设置的变量)的数量项目,一次只显示$config[items_per_page]