所以我想在查询中添加ORDER BY
,但它不起作用,因为日期字段的形式是2013-02-27 00:00:00
。如何在运行中转换它,以便与ORDER BY
一起使用?这是我的问题:
$sql = "SELECT * FROM $wpdb->posts";
$sql .= " INNER JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id";
$sql .= " WHERE $wpdb->posts.post_type = 'task'";
$sql .= " AND $wpdb->postmeta.post_id IN ( SELECT `post_id` FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key = '_completed' AND $wpdb->postmeta.meta_value = '0' )";
$sql .= " AND $wpdb->postmeta.post_id IN ( SELECT `post_id` FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key = '_assigned' AND $wpdb->postmeta.meta_value = '%s' )";
$sql .= " GROUP BY $wpdb->postmeta.post_id";
$sql .= " ORDER BY $wpdb->postmeta._due ASC";
$tasks = $wpdb->get_results( sprintf( $sql, $user_id ) );
所讨论的字段是表wp_postmeta
中的_due
。这是给Wordpress的,但由于这是一个MYSQL问题,我想我应该在这里问它。谢谢
这是因为你使用的是GROUP BY
(错误),MySQL不能保证排序的顺序。如果你正确使用了功能,你会得到想要的结果。
请参阅MySQL对GROUP BY
的扩展。