2017-03-12 14 views
-1

私はこのようになりますデータベースがあります。 enter image description hereSQLクエリ:最大数の文字列を取得する|解析?

はなぜ私に聞かないでください、これは私がそれを処理する必要がそうプラグインワードプレスによって書かれています。私が望むのは、meta_key = product_shops_X_linkのすべてのリンクを取得することです。しかし、すべてのポストは、さまざまな量の製品ショップリンクを持っています。

この写真では、私はWhere meta_key Like "%_link%"を試しました。私はまたproduct_shops_X_linkフィールドがproduct_を持っているすべてのmeta_keys ...

を得るというようなクエリを実行する場合でも、私が欲しいのは、単にすべてのproduct_shops_X_link分野です。今私は思う2つの方法があります。

ウェイ1:メタキーフィールドの最大数を取得しますWhere meta_key Like "%product_shops_X_link%" OR meta_key Like "%_product_shops_X_link%"。それは_productまたはちょうどproductの問題ではありません。数字は等しい。 product_shops_0_linkフィールドだけがある場合は、_product_shops_0_linkフィールドも必要です。

Way2:product_shops_X_linkフィールドのすべてを、最初に_productの部分を除いて検索し、ALL product_shops_X_linkフィールドを入力するパターンを作成します。フィールドには何が入っていても。

どちらの場合でも、コード化する方法がわかりません。 誰かがそれをコード化する方法を知っていますか、それとももっと良い方法ですか?

ご挨拶とありがとうございます!

+2

'WHERE meta_key LIKE 'product_shops _%_ link''はどうですか? –

+2

@IgorJerosimić '_'はLIKE式の1文字のプレースホルダです。 –

+0

私は簡単な方法を見つけました: 'SELECT COUNT(meta_key)AS CNT、post_id FRY fWR6qIN_postmeta where meta_key like 'product_shops _%_ link''。しかし、 'post_id'や' meta_key'のようなクエリにいくつかの属性を追加するにはどうすればいいですか?実際のところ私は数字を見て、それは働いています。しかし、いくつかの属性を追加すると、エラーが発生しますか? –

答えて

0

あなたはエントリーが_productで始まるたくない場合、あなたは例えば、あなたのLIKEパターンから_または%を除外することができます。

SELECT * 
FROM links 
WHERE meta_key LIKE 'product_%'; 
0

申し訳ありませんが、私は誤解していますが、あなたはそれらの数を捕獲しようとしている場合行?もしそうなら、あなたはこのようにネイティブREPLACE()機能を使用することができます。

SELECT *, REPLACE(REPLACE(meta_key, 'product_shops_', ''),'_link','') as captured_number 
FROM mytable 
WHERE meta_key LIKE 'product\_shops\_%\_link' 
ORDER BY captured_number DESC 

これは最初の数が最も多いと、あなたがしたい行を取得します。別の方法として、あなたは、MySQL用のthis regex libraryを使用して、番号をキャプチャするために正規表現を使用することができます。

SELECT *, PREG_CAPTURE('/product_shops_([0-9]+)/', meta_key) as captured_number 
FROM mytable 
WHERE meta_key LIKE 'product\_shops\_%\_link' 
ORDER BY captured_number DESC 
+0

いいえ、そうです。しかし、私のSQLはこう言っています: "関数PREG_CAPTUREは存在しません" –

+0

'preg_capture()'を使うために私の答えで述べたライブラリをインストールする必要があります。それは多くの努力のように見えるかもしれませんが、長期的には、あなたはそれが有用であると思うでしょう。 – billynoah

+0

@FrazeJr。 - ネイティブのmysql関数を使って答えを更新しました。 – billynoah

0

しかし、どのように私はpost_idのか meta_key

これらのようなクエリにはいくつかのより多くの属性をすることができ追加することができます

SELECT myFields 
FROM myTable 
WHERE (post_id = 21179) AND (meta_key LIKE 'product_shops_%') 
ANDと組み合わせて、例えば product_..post_id = 21179meta_key開始を持つアイテムを照会します
関連する問題