mizube
メンバー
3 years前の投稿 #
#-WordPress 2.6.1-ja
#-PHP 4.4.2
#-MySQL MySQL 5.0.51a-community-log
query_posts で cat/tag/category_name 引数等を指定すると、SQL のリクエストに GROUP BY 句が入ります。
そのためだと思うのですが、任意のソートが出来ていないことに気が付きました。
というのは、 posts_groupby_request フックで空の値を返すフィルターを使い、
強引に GROUP BY 句を消してみるとソートが出来た、ということからなのですが、
これはページングの判断等、どこかで別の問題を引き起こしている気がしてなりません。
気になるのは、他のサーバーにインストールした同じバージョンの WordPress では、query_posts で cat 引数を使用した際に、同じ現象は発生していないらしいことです。
そちらは同じく PHP4.4.x ですが MySQL のバージョンが 4.0.x だったと思います。
何か関係あるのでしょうか?
タグの使い方に基本的な差はなかった気がするので、さっぱり分かりません。
元はといえば PHP と MySQL への理解が不十分なのがいけないのですが、
適切な解決法があればご教示ください。
mizube
メンバー
3 years前の投稿 #
追記です。
他のサーバーの組み合わせには、PHP5.2.1 と MySQL 5.0.23 という環境もあります。
そちらでも問題は発生していないように見えます。
ただ、環境はなんとなく原因ではない気がするので、もう少し自分でも詳しく調査してみます。
mizube
メンバー
3 years前の投稿 #
更に追記です。
$wp_query->request を $wpdb->get_results() してみましたが、
同じく ORDER BY が利いていない結果になりましたので、
やはり SQL の構文のどこかに問題があるか、
MySQL のバージョン自体に問題があるかのいずれかであると思われましたが、
どうも cat 引数で除外するカテゴリのみを指定した場合の SQL 文で
ORDER BY がうまく動かないようです。
他のサーバーでのテストも含め、もう少し詳しく調べてみます。
mizube
メンバー
3 years前の投稿 #
長い間放置していました。結局私の調べ方が悪く、原因が分からずじまいです。
while 文の前に $wp_query->posts を array_multisort() でソートすることで対応しました。
# 真の意味では全く解決していないのですが、迷惑がかかりますので解決済みにしておきます。