サポート » 使い方全般 » query_posts で cat/tag 引数等を指定すると orderby 引数等が機能しない

  • 解決済 mizube

    (@mizube)


    #-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 への理解が不十分なのがいけないのですが、
    適切な解決法があればご教示ください。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 mizube

    (@mizube)

    追記です。
    他のサーバーの組み合わせには、PHP5.2.1 と MySQL 5.0.23 という環境もあります。
    そちらでも問題は発生していないように見えます。

    ただ、環境はなんとなく原因ではない気がするので、もう少し自分でも詳しく調査してみます。

    トピック投稿者 mizube

    (@mizube)

    更に追記です。

    $wp_query->request を $wpdb->get_results() してみましたが、
    同じく ORDER BY が利いていない結果になりましたので、
    やはり SQL の構文のどこかに問題があるか、
    MySQL のバージョン自体に問題があるかのいずれかであると思われましたが、
    どうも cat 引数で除外するカテゴリのみを指定した場合の SQL 文で
    ORDER BY がうまく動かないようです。
    他のサーバーでのテストも含め、もう少し詳しく調べてみます。

    トピック投稿者 mizube

    (@mizube)

    長い間放置していました。結局私の調べ方が悪く、原因が分からずじまいです。
    while 文の前に $wp_query->posts を array_multisort() でソートすることで対応しました。

    # 真の意味では全く解決していないのですが、迷惑がかかりますので解決済みにしておきます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「query_posts で cat/tag 引数等を指定すると orderby 引数等が機能しない」には新たに返信することはできません。