Php 棘手的查询:按两个值嵌套排序
我想按两个数据库值对结果进行排序:rating\u full后跟rating\u count 目前,我是按最高的评分订购的。效果很好Php 棘手的查询:按两个值嵌套排序,php,mysql,database,wordpress,database-connection,Php,Mysql,Database,Wordpress,Database Connection,我想按两个数据库值对结果进行排序:rating\u full后跟rating\u count 目前,我是按最高的评分订购的。效果很好 $sql .= " LEFT JOIN {$wpdb->postmeta} rating ON ({$wpdb->posts}.ID = rating.post_id AND rating.meta_key IN ('**rating_full**'))"; … … $sql = "cast(rating.meta_value as decimal
$sql .= " LEFT JOIN {$wpdb->postmeta} rating ON ({$wpdb->posts}.ID = rating.post_id AND rating.meta_key IN ('**rating_full**'))";
…
…
$sql = "cast(rating.meta_value as decimal(10,2)) {$order}";
……
第一行代码是SELECT语句的一部分,用于检索评级\u full部分
第二行代码是订单BY部分,目前仅使用评级计数
据我所知,评级。第二行代码中提到的meta_值是评级_全值
我正试图通过评级为“满”,评级为“计数”来获得订单,我不确定如何修改第一行,以便实现这一点
谢谢
完整代码:
这是我输入错误的解决方案 $sql.=“左连接{$wpdb->posts}在({$wpdb->posts}.ID=rating.post_ID和rating.meta_key IN('rating_full'))上进行评级({$wpdb->posts}.ID=count.post_ID和count.meta_key IN('rating_count'))”
$sql=“cast(rating.meta_值为十进制(10,2)){$order},cast(count.meta_值为十进制(10,2)){$order}” 因此,请向我们展示一些示例数据以及您希望实现的目标。您使用正确的语法键入了它,并将按rating_full列出您的输出,如果存在相同的rating_full值,则将使用rating_count来执行二次排序。数据库结构:数据库值:-感谢这让我发疯:)Web Front排序图像:查看我不知道完整查询来自何处,否则,解决$sql=“cast(rating.meta_value为十进制(10,2)){$order},cast(count.meta_value为十进制(10,2)){$order}”会容易得多我认为这应该行得通,但可能我的语法不正确
// Sorting
add_filter('posts_join', 'directorySortingJoin',10,2);
function directorySortingJoin($join, $query) {
global $wpdb, $aThemeOptions;
if ($query->is_main_query() && !$query->is_admin && ((isset($_GET['dir-search'])) || (isset($query->query_vars["a-dir-item-category"])) || (isset($query->query_vars["a-dir-item-location"])))) {
$sql = "";
// default ordering
$orderby = (isset($aThemeOptions->directory->defaultOrderby)) ? $aThemeOptions->directory->defaultOrderby : 'post_date';
// get from get parameters
if (!empty($_GET['orderby'])) {
$orderby = $_GET['orderby'];
}
if ($orderby == 'rating') {
**$sql .= " LEFT JOIN {$wpdb->postmeta} rating ON ({$wpdb->posts}.ID = rating.post_id AND rating.meta_key IN ('rating_full'))";**
//$sql .= " LEFT JOIN {$wpdb->postmeta} rating ON (wp_posts.ID = rating.post_id AND rating.meta_key IN ('rating_full')) LEFT JOIN {$wpdb->postmeta} count ON ({$wpdb->posts} = count.post_id AND count.meta_key IN ('rating_count'))";
}
if ($orderby == 'packages') {
directorySaveUserPackagesToDb();
$sql .= " LEFT JOIN {$wpdb->usermeta} packages ON ({$wpdb->posts}.post_author = packages.user_id AND packages.meta_key IN ('dir_package'))";
}
if (isset($aThemeOptions->directory->showFeaturedItemsFirst)) {
$sql .= " LEFT JOIN {$wpdb->postmeta} featured ON ({$wpdb->posts}.ID = featured.post_id AND featured.meta_key IN ('dir_featured'))";
}
$join .= $sql;
//echo $join;
}
return $join;
}
add_filter('posts_orderby', 'directorySortingOrderby',10,2);
function directorySortingOrderby($orderby, $query) {
global $wpdb, $aThemeOptions;
if ($query->is_main_query() && !$query->is_admin && ((isset($_GET['dir-search'])) || (isset($query->query_vars["a-dir-item-category"])) || (isset($query->query_vars["a-dir-item-location"])))) {
$sql = "";
// default ordering
$orderby = (isset($aThemeOptions->directory->defaultOrderby)) ? $aThemeOptions->directory->defaultOrderby : 'post_date';
$order = (isset($aThemeOptions->directory->defaultOrder)) ? $aThemeOptions->directory->defaultOrder : 'DESC';
// get from get parameters
if (!empty($_GET['orderby'])) {
$orderby = $_GET['orderby'];
}
if (!empty($_GET['order'])) {
$order = $_GET['order'];
}
if ($orderby == 'rating') {
if (isset($aThemeOptions->directory->showFeaturedItemsFirst)) {
$sql = "featured.meta_value DESC, convert(rating.meta_value, decimal) {$order}";
} else {
//$sql = "convert(rating.meta_value, decimal) {$order}";
**$sql = "cast(rating.meta_value as decimal(10,2)) {$order}";**
//$sql = "cast(rating.meta_value as decimal(10,2)) {$order}, count.meta_value {$order}";
}
} else if ($orderby == 'packages') {
if (isset($aThemeOptions->directory->showFeaturedItemsFirst)) {
$sql = "featured.meta_value DESC, packages.meta_value {$order}";
} else {
$sql = "packages.meta_value {$order}";
}
} else {
if (isset($aThemeOptions->directory->showFeaturedItemsFirst)) {
$sql = "featured.meta_value DESC, {$wpdb->posts}.{$orderby} {$order}";
}
}
$orderby = $sql;
//echo $orderby;
}
return $orderby;
}
// Save directory packages for sorting
function directorySaveUserPackagesToDb() {
$users = get_users();
// capabilities list
$roles = array(
'administrator' => 10,
'directory_5' => 9,
'directory_4' => 8,
'directory_3' => 7,
'directory_2' => 6,
'directory_1' => 5,
'editor' => 4,
'author' => 3,
'contributor' => 2,
'subscriber' => 1
);
foreach ($users as $user) {
if (isset($user->roles[0])) {
if (array_key_exists($user->roles[0], $roles)) {
update_user_meta($user->ID, 'dir_package', $roles[$user- >roles[0]]);
} else {
update_user_meta($user->ID, 'dir_package', 0);
}
}
}
}