WordPressデータベースでシリアル化された投稿メタ値を検索しようとしています。シリアル文字列の構造を知っているので、前の値を検索し、インデックスを取得してから、そのインデックス値の前に必要な文字数を取得できます。結果に基づいてソートしたいので、この特定のクエリで正規表現を効果的に使用することはできません。これは私がこれまでに持っているものですが、構文に失敗しており、ASキーワードの使用とANDステートメントのグループ化に関係していると思います。
SELECT SQL_CALC_FOUND_ROWS _posts.ID FROM _posts
INNER JOIN _postmeta ON(_posts.ID = _postmeta.post_id)
WHERE 1 = 1
AND _posts.post_type='犬'
AND(_posts.post_status ='publish')
AND((_postmeta.meta_key ='_meta_general'
AND CAST(_postmeta.meta_value AS CHAR))AS dmet
AND POSITION('; s:6:\ "weight' IN dmet)AS ddex
AND MID(dmet、ddex、10))AS dres
GROUP BY dres ORDER BY dres ASC LIMIT 0、10
まあ、私はまだこのことの構造に問題があります。綿密な調査の後、前のコード@fenwayは機能しませんでした。これが私が今持っているものです。@fenwayの回答の問題は、「FROM」投稿を選択していたステートメントの選択部分でMID値とPOSITION値が呼び出されていたことです。それらはpostmetaにあります。そこで、postmetaテーブルをidでpostsテーブルに結合しているINNERJOINの後に文字列フィルタリングを再配置しようとしました。これは機能していません。この質問は単にSQLに関する知識が不足しているためだと理解していますが、ここで学ぼうとしています。
これらのどれも私が望むように機能していません。構文エラーがあります。このコードの目的は、返されたクエリを、serial(json)文字列内の値でグループ化することです。この方法では、次の値を検索します(この場合、次のようになります-"; s:6:" weight-)この文字列のインデックスがある場合、前の10個の値(日付xx / xx /)を返します。 xxxx)。この文字列にラベルを付けて(AS dres)、結果をdresで並べ替えます。Wordpressはpostsテーブルから投稿を収集し、postmetaテーブルからpostmetaを収集します。post metaテーブルは、jsonが格納される場所です。これは本当に単純なアルゴリズムであり、私を悩ませているのは構文だけです。
SELECT SQL_CALC_FOUND_ROWS {$ wpdb-> posts} .ID
FROM {$wpdb->posts}内部結合{$wpdb->postmeta}
MID(CAST({$ wpdb-> postmeta} .meta_value AS CHAR)、
POSITION('; s:6:\ "weight' IN CAST({$ wpdb-> postmeta} .meta_value AS CHAR))、10)AS dres
オン({$ wpdb-> posts} .ID = {$ wpdb-> postmeta} .post_id)
WHERE 1 = 1
AND {$ wpdb-> posts} .post_type ='dog'
AND({$ wpdb-> posts} .post_status ='publish')
AND {$ wpdb-> postmeta} .meta_key ='_meta_general'
AND POSITION('; s:6: "weight' IN CAST({$ wpdb-> postmeta} .meta_value AS CHAR))> 0
GROUP BY {$ wpdb-> posts} .ID ORDER BY dres ASC LIMIT 0、10