我有这个问题......
$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,它向我展示了数据库中出现的第一个结果,我需要最后一个......
我该怎么做? :s
被修改 这是最终查询,没有那些变量
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
答案 0 :(得分:0)
默认情况下,MySQL按升序对记录进行排序,首先获取最后一条记录,然后对DESCNDING ORDER
中的记录进行排序:
$sOrder DESC
答案 1 :(得分:0)
我不确定aColumns
中的columsn是什么,或者dominio
列来自哪个表。当您使用GROUP BY
对多个行进行分组时,您为结果选择的列应该对该组的所有行具有相同的值(即,在功能上相关),或者应该是某些aggregate function合并组中所有行的值。
一些SQL方言强制执行此操作。 MySQL没有,但如果您选择一个在组内具有不同值的非聚合列,则无法保证实际返回给您的值。它可能来自组内的任何行。所以没有办法获得这些行的“最后”,因为没有任何固有的顺序。在简单的情况下,您可以使用MIN
或MAX
来选择所需的值。在更复杂的情况下,您很可能必须使用子查询从组内进行选择。
例如,this answer根据按升序排序的{{1}计算每个Name
(对应于您的dominio
分组列)Action
的最后一个值}}。或者更确切地说,第一个值使用降序排列,这是相同的。
如下面的评论表明您希望Time
中每个id_dominio
的最大dominio
,我建议如下:
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
,并且所有后续联接都可以使用该子查询中的ID而不是完整的dominio
表。如果您还需要dominio
表中的其他列,则可能必须再次在连接中包含该列,以便您可以从子查询中选择了ID的那些row3中获取所有值。