按多个分类排序的自定义查询

时间:2014-09-24 作者:falrod

我从一位客户那里得到了这个网站来修复一些错误。他们是一家汽车经销商。

之前的开发人员创建了一个自定义的post类型(vehicle),有两种分类法:make和model。(它们不是自定义字段,而是分类法)

如果我这样做,我可以很容易地由车辆制造商订购

SELECT distinct(wp_posts.id), wp_posts.post_title, wp_terms.name 
FROM wp_posts, wp_postmeta, wp_terms 
where wp_posts.id = wp_postmeta.post_id 
and wp_postmeta.meta_value = wp_terms.term_id 
and wp_postmeta.meta_key = "make" 
and wp_posts.post_status = "publish" 
and wp_posts.post_type = "vehicle" 
order by wp_posts.id, wp_terms.name;
但我如何同时按制造商和型号订购?

1 个回复
SO网友:falrod

好吧,如果有人在搜索并试图找到一种方法来完成我在这里所做的事情,我自己就想出来了。

我的任务是:我有一个名为vehicle的自定义post类型,有两个分类法,车辆制造商和车辆模型。我需要按制造商的字母顺序显示所有帖子,然后按型号显示,所以在列表中很有意义,例如:奥迪A1、奥迪A4、宝马120等等。

只按一种分类法订购很容易,但如果我只按制造商订购,我的帖子会显示奥迪A4、奥迪A1、奥迪A3。

我通过这样做解决了这个问题。

首先,我将定期获取get\\U结果,以便获得所有制造商的字母顺序:

 $makers_list = $wpdb->get_results("SELECT 
GROUP_CONCAT(pm.post_id ) as id_carro, tm.name as maker
    FROM wpav_postmeta pm
    INNER JOIN wpav_terms tm ON tm.term_id = pm.meta_value
    WHERE pm.meta_key=\'make\'
    GROUP BY tm.name
    ORDER BY tm.name
    ");
mysql的“GROUP\\u CONTACT”功能将返回帖子ID列表,如19、49、59、83、58395394等

然后,我对每个制造商进行foreach,并获得特定制造商的车辆订单列表,按车型分类法排序。

foreach ( $makers_list as $maker ) {

$vehicle_list = $wpdb->get_results("SELECT tm.name as model , pm.post_id
FROM wpav_postmeta pm
INNER JOIN wpav_terms tm ON tm.term_id = pm.meta_value
WHERE pm.post_id IN (" . $fabr->vehicle_id . ") and pm.meta_key=\'model\'
ORDER BY model
");
那么,这只是为每辆车做另一个foreach的问题

foreach ( $vehicle_list as $vehicle ) {

$status_post = get_post_status($vehicle->post_id);
$type_post = get_post_type($vehicle->post_id);

if ( $status_post == \'publish\' && $type_post == \'vehicle\') {
$post = get_post($vehicle->post_id);
正如你所看到的,我正在检查帖子是否已发布,它是否是正确的帖子类型,然后我设置了post变量,它完成了,之后是正常的wordpress循环。

希望我能帮上忙。

结束