按正/负值和表中未找到的任何其他帖子排序

时间:2017-05-24 06:28:00

标签: php mysql wordpress select sql-order-by

所以我试图从数据库中获取所有帖子并订购它们但我被卡住了。 我想订购最喜欢的帖子 - >不喜欢 - >最不喜欢的。

问题是有些帖子出现在wti_like_post表中,有些则不出现。所以我不确定如何订购它们,通常我会使用像ORDER BY lp.value DESC

这样的东西

这是我的查询:

 $querystr = "SELECT DISTINCT {$wpdb->prefix}posts.ID, {$wpdb->prefix}posts.post_title, {$wpdb->prefix}posts.post_excerpt, {$wpdb->prefix}posts.guid, {$wpdb->prefix}posts.post_author
            FROM {$wpdb->prefix}posts
            LEFT JOIN {$wpdb->prefix}term_relationships rel ON rel.object_id = {$wpdb->prefix}posts.ID
            LEFT JOIN {$wpdb->prefix}term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
            LEFT JOIN {$wpdb->prefix}terms t ON t.term_id = tax.term_id
            LEFT JOIN {$wpdb->prefix}wti_like_post lp ON lp.post_id = {$wpdb->prefix}posts.ID
            WHERE t.term_id = " . $_SESSION['pageCategory'] . " 
            AND {$wpdb->prefix}posts.post_type = 'post' 
            AND post_status = 'publish' 
            ORDER BY (lp.value <= 0) DESC, ({$wpdb->prefix}posts.ID != lp.post_id) DESC, (lp.value > 0) DESC
            LIMIT $limit OFFSET $offset
            ";

到目前为止,我已尝试过在S.O上找到的解决方案,但似乎没有任何效果。

我尝试过的其中一个解决方案建议使用类似ORDER BY (lp.value <= 0) DESC, ({$wpdb->prefix}posts.ID != lp.post_id) DESC, (lp.value > 0) DESC之类的内容,但它不起作用。

我还要提到我想要获得的很多帖子都没有链接到wti_like_post表。

这是wti_like_post表的屏幕截图,它将喜欢/不喜欢的帖子链接到数据库中的wordpress posts表。

enter image description here

关于如何解决这个问题的任何想法。

干杯

1 个答案:

答案 0 :(得分:1)

  

最喜欢的订单 - &gt;不喜欢 - &gt;最不喜欢的

你应该ORDER BY lp.value DESC