Sql 返回drupal节点的最新版本

Sql 返回drupal节点的最新版本,sql,drupal,drupal-6,Sql,Drupal,Drupal 6,我正在编写一个drupal模块,需要编写一个查询,返回我的一个content\u类型表的特定行。到目前为止,我的问题是: SELECT DISTINCT pb.*, f.filepath FROM {content_type_promo_box} pb LEFT JOIN {files} f ON pb.field_promo_image_fid = f.fid 我在工作时意识到,该表不仅包含此内容类型的每个cck字段,还包含每个字段的多个版本。如何将查询限制为仅包含当前节点版本的值的行 更新

我正在编写一个drupal模块,需要编写一个查询,返回我的一个content\u类型表的特定行。到目前为止,我的问题是:

SELECT DISTINCT pb.*, f.filepath FROM {content_type_promo_box} pb LEFT JOIN {files} f ON pb.field_promo_image_fid = f.fid
我在工作时意识到,该表不仅包含此内容类型的每个cck字段,还包含每个字段的多个版本。如何将查询限制为仅包含当前节点版本的值的行

更新:我需要澄清一下我的问题。我已经走上了视图的道路,我确实考虑过使用node_load(谢谢你的回答,Jeremy!)。实际上,我的问题更多的是关于如何编写适当的SQL语句,而不是专门针对drupal。我只想返回包含任何特定节点(nid)的最新版本(vid是最大版本)的行。下面是一个例子:

-------------
| nid | vid |
-------------
| 45  |  3  |
| 23  |  5  |
| 45  |  9  |
| 23  |  12 |
| 45  |  36 |
| 33  |  44 |
| 33  |  78 |
------------- 
我的查询应返回以下内容:

-------------
| nid | vid |
-------------
| 23  |  12 |
| 45  |  36 |
| 33  |  78 |
-------------

有道理吗?谢谢

您最好使用获取加载对象,而不是自己编写查询

甚至可以用来做你需要的事情

在为自己编写查询时这样做的原因是Drupal及其模块作为一个框架坐在一起。大多数情况下,您会希望使用该框架来做您想做的事情,而不是绕过它来编写您自己的查询。将来,如果升级Drupal或模块节点,加载()仍然可以工作,但代码可能无法工作

假设
(nid,vid)
组合不正确:

SELECT  m.*
FROM    (
        SELECT  nid, MAX(vid) AS mvid
        FROM    mytable
        GROUP BY
                nid
        ) q
JOIN    mytable m
ON      (m.nid, m.vid) = (q.nid, q.mvid)

节点表存储节点的当前版本,修订ID在所有内容中都是唯一的。这使得查询非常简单:

SELECT  m.*
FROM    
    {mytable} AS m
JOIN {node} AS n
ON m.vid = n.vid

如果节点的
{mytable}
中没有内容,则查询不会返回该内容;更改为
右连接
以返回所有节点。

什么意思,修改的节点或多值字段?在最后一行中将“q.vid”更改为“q.mvid”之前,我遇到了一个错误。然后它成功了。谢谢您不能简单地假设MAX(vid)将返回当前版本。进行修订的目的是可以恢复到以前的版本,对吗?您应该从节点表中检索nid的当前vid,而不是搜索最高版本id。话虽如此,我倾向于同意Jeremy French的答案。但是,恢复到以前的版本不会创建新的版本id吗?一些模块在获得批准之前不会发布最新版本。在这种情况下,最高版本不是当前版本。因为版本ID在所有内容中都是唯一的,并且存储在nodes表中,所以不需要子查询。检查我的查询答案,该查询应避免任何MAX()问题。