0

私はサイトhttp://change.isを持っています、私はそれを新しいサーバーに移行します。現在、SQLクエリの1つが奇妙な結果を示しています。クエリは次のとおりです。

SELECT distinct group_concat(pm.meta_value separator ' ') as composer, group_concat(pm.meta_value separator '-') as composer_link FROM $wpdb->postmeta pm where (pm.meta_key='composer_fname_value' OR pm.meta_key='composer_lname_value') and pm.post_id in (SELECT p.ID FROM $wpdb->posts p where p.post_type='quote' AND p.post_status='publish') group by pm.post_id order by group_concat(IF(pm.meta_key='composer_lname_value', pm.meta_value,'')) ASC

説明:

カスタム投稿タイプ「quote」の管理セクションに、作成者の名、作成者の姓(このクエリで必要なもの)などのメタフィールドがあります。新しいサーバーに移行する前に、このクエリは作成者の名前を選択し、次に作成者の名前を選択します。したがって、出力は次のようになります(Seteve Jobs、Jeff Bezos)。移行後、このカスタムタイプ「quote」の新しい投稿を追加しました。しかし、今は著者の名前と著者の名前を選択しているので、出力は(Diamandis Peter)のようになります。

ポイント、これは追加された新しい投稿に対してのみ選択されます。データベース内の古い投稿については、問題なく動作します。

これについて助けてください、または代替クエリを提供してください

4

1 に答える 1

0

group_concat関連するpm.meta_keyに応じて、pm.meta_valuesを注文するようです。pm.meta_key ='composer_lname_value'の場合、値が最初に来る必要があります。

この場合、最も簡単な解決策は、オプションのORDERBY句を使用するようですgroup_concat

SELECT distinct 
 group_concat(pm.meta_value order by IF(pm.meta_key='composer_lname_value', 1,0) separator ' ') as composer,
 group_concat(pm.meta_value order by IF(pm.meta_key='composer_lname_value', 1,0) separator '-') as composer_link
 ... the rest of the query being identical...

クエリの最後にあるORDERBYを使用してこれを実現したかったのかもしれませんが、これは同じ行内のコンテンツではなく、出力行を並べ替えます。

于 2012-04-19T15:30:40.400 に答える