0

我有这个查询...

    $sQuery = "
        SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
        FROM   dominios left join datas on dominios.id_dominio=datas.id_dominio
left join dnss on dominios.id_dominio=dnss.id_dominio
left join entidades_gestoras on dominios.id_dominio=entidades_gestoras.id_dominio
left join estados on dominios.id_dominio=estados.id_dominio
left join ips on dominios.id_dominio=ips.id_dominio
left join quantidade_dnss on dominios.id_dominio=quantidade_dnss.id_dominio
left join responsaveis_tecnicos on dominios.id_dominio=responsaveis_tecnicos.id_dominio
left join titulares on dominios.id_dominio=titulares.id_dominio 
        WHERE dominios.estado not like 2 and dominios.estado not like 0 AND data_expiracao > '".date("Ymd")."' $sWhere $where 
        GROUP BY dominio 
        $sOrder
        $sLimit
        ";

它返回我“需要”的结果......但是 Group By,它向我显示了出现在数据库中的第一个结果,而我需要最后一个......

我怎样才能做到这一点?:秒

已编辑 这是最终查询,没有这些变量

  SELECT SQL_CALC_FOUND_ROWS `datas`.`data_insercao`, `datas`.`data_expiracao`, `datas`.`data_registo`, 
`dominios`.`dominio`, 
`titulares`.`nome`, `titulares`.`morada`, `titulares`.`email`, `titulares`.`localidade`, `titulares`.`cod_postal`, 
`entidades_gestoras`.`nome`, `entidades_gestoras`.`email`, 
`responsaveis_tecnicos`.`nome`, `responsaveis_tecnicos`.`email`, 
`ips`.`ip`, `dominios`.`id_dominio` FROM dominios left join datas on dominios.id_dominio=datas.id_dominio 
left join dnss on dominios.id_dominio=dnss.id_dominio 
left join entidades_gestoras on dominios.id_dominio=entidades_gestoras.id_dominio 
left join estados on dominios.id_dominio=estados.id_dominio 
left join ips on dominios.id_dominio=ips.id_dominio 
left join quantidade_dnss on dominios.id_dominio=quantidade_dnss.id_dominio 
left join responsaveis_tecnicos on dominios.id_dominio=responsaveis_tecnicos.id_dominio left join titulares on dominios.id_dominio=titulares.id_dominio WHERE dominios.estado not like 2 and dominios.estado not like 0 AND data_expiracao > '20120730' GROUP BY dominio ORDER BY `datas`.`data_insercao` asc LIMIT 0, 10
4

2 回答 2

0

默认情况下,MySQL 按升序对记录进行排序,要首先获取最后的记录,您需要对记录进行排序DESCNDING ORDER

$sOrder DESC
于 2012-07-30T10:51:29.480 回答
0

一般注意事项

我不确定您在哪个列中aColumns,或者该dominio列来自哪个表。当您使用 对多行进行分组时GROUP BY,您为结果选择的列应该对于组的所有行具有相同的值(即在功能上依赖),或者应该是一些聚合函数,将所有行的值组合在群组。

一些 SQL 方言强制执行此操作。MySQL 没有,但是如果您选择在组内具有不同值的未聚合列,则无法保证实际返回给您的值是什么。它可能来自组内的任何一行。所以没有办法得到这些行的“最后一个”,因为没有任何固有的顺序。在简单的情况下,您可以使用MINMAX选择您需要的值。在更复杂的情况下,您很可能必须使用子查询从组中进行选择。

例如,此答案根据升序为每个Name(对应于您的dominio分组列)计算最后一个值。或者更确切地说,使用降序排列的第一个值是相同的。ActionTime

你的申请

由于您在下面的评论表明您想要id_dominio每个dominioin的最大值dominios,我建议如下:

SELECT …
FROM (SELECT MAX(id_dominio) AS id_dominio
      FROM dominios
      GROUP BY dominio
      WHERE estado <> 2
        AND estado <> 0
     ) domIds
LEFT JOIN datas ON domIds.id_dominio=datas.id_dominio
…

因此将有一个子查询来计算id_dominio每个dominio组的最大值,并且所有后续连接都可以使用该子查询中的 ID 而不是整个dominio表。如果您还需要表中的其他列,则dominio可能必须再次将其包含在连接中,以便您可以从您在子查询中选择其 ID 的那些 row3 中获取所有值。

于 2012-07-30T11:01:16.593 回答