【问题标题】:How to reformulate an sql query如何重新编写 sql 查询
【发布时间】:2013-07-13 10:05:47
【问题描述】:

我不是 sql 编程方面的专家,我想知道您是否可以帮助我使用 INNER JOIN 重新编写以下查询?

db_query("
    select max(field_date_and_time_value2) as last_time 
    from field_data_field_date_and_time 
    where (field_date_and_time_value2 > '".$today."') 
    AND (".$node->uid." = (select uid from node where nid = " . $node->nid ."))");

【问题讨论】:

  • field_data_field_date_and_time 表中uid 字段的名称是什么?

标签: mysql sql select inner-join


【解决方案1】:

这样的东西有用吗?

SELECT
    max(a.field_date_and_time_value2) as last_time
    , b.uid
FROM field_data_field_date_and_time a
    INNER JOIN
        node b
    ON
        /* this piece might be wrong. what is the relationship between the first table and the second one? */
        b.nid = '".$node->nid."'
where
    a.field_date_and_time_value2 > '".$today."' AND
    b.uid = $node->nid

【讨论】:

    【解决方案2】:

    假设您的field_date_and_time 表中有一个名为uid 的列与您的node 表中的该列具有相同的含义,那么您需要执行以下操作。

          SELECT MAX(A.field_date_and_time_value2) AS last_time
            FROM field_date_and_time A
      INNER JOIN node B ON A.uid = B.uid
           WHERE B.nid = '".$node->nid."'
             AND A.field_date_and_time_value2 > '".$today."'
    

    当心 SQL 注入攻击!避免将变量直接替换到 SQL 语句中,除非您确实确定这些变量不会被 badguy 用户破坏!记住那个叫的人的故事

    "johnny ; drop tables *;" 
    

    【讨论】:

    • 我相信 Little Bobby Table 的全名是“Robert'; DROP TABLE students; --
    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 2015-08-14
    • 2019-12-16
    • 2021-01-15
    • 1970-01-01
    • 2013-02-01
    • 2012-02-29
    • 2021-06-16
    相关资源
    最近更新 更多