gpt4 book ai didi

php - 如何在 WordPress 中按派生 SQL 列排序?

转载 作者:行者123 更新时间:2023-11-29 22:37:57 25 4
gpt4 key购买 nike

我在对 WordPress 网站上评分最高的帖子进行排序时遇到问题。

我想对得分最高的帖子 ( rating_full) 和得票最多的帖子 ( rating_count) 进行排序和显示。

两者的类型都是:LongString。

排序示例:

《商业 4》的评分为 4.5/5 - 3 票
商业 2 的评分为 4.5/5 - 1 票
业务 1 的评级为 3.5/5 - 2 票

在感兴趣的代码区域:

orderby 评级是我在代码中关心的部分。

($orderby == 'rating')

代码中帖子的评分为' rating_full'。 (范围为1到5)

代码中帖子的投票计数为' rating_count'(投票数)

两者的类型都是:LongString

这是数据库结构和数据的图像: http://s22.postimg.org/wojlwqlz5/database.png

下面是我的代码。我注意到我的排序并不总是根据 rating_full 按顺序对帖子进行排序。我不知道为什么。我还没有尝试实现 count DESC,因为我不确定。

// 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["ait-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'))";
}
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;
}
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}";
}
} 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;
}
return $orderby;
}

最佳答案

我发现问题了!使用convert代替cast。

$sql =“转换(评级.meta_value, 小数) {$order}”;

$sql = "cast( rating.meta_value asdecimal(10,2)) {$order}";

关于php - 如何在 WordPress 中按派生 SQL 列排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29478522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com