2017-07-29 5 views
0

[bodyRef:St12341234]を含む一般的なテキストを持つ 'body'のページを含むwikiデータベースがあります。mysqli文を作成して場所を引き出すことを試みていますinfo [[Gridref:ST12341234]]または将来の[[PostCode:OX1099A]]または[[LATLON:10000,10000]]に表示されます。これまでのところ、全ページテキスト(本文)を持つページネーム(タグ)のリストがあります。php mysqlタグ間のmysqlプルアウトテキスト

SELECT tag, body FROM `wikka_pages` 
WHERE body LIKE '%[[GridRef:%' 
ORDER BY `wikka_pages`.`tag` ASC 

ただし、本文には他のすべてのテキストも含まれます。私はSUBSTRING_INDEX()REGEXやその他の関数を使って本文をフィルタリングする方法を理解できません。大量のテキストが取り出されると、私はphpを使ってそれを何かに操作してGoogleマップやその他に渡すことができます。だから私は、あなたがネイティブのMySQLでの正規表現を抽出することはできません

`| tag | body | 
--------------- 
| Box | GridRef:ST12341234 | 
| hill | GridRef:SK12341233 | 
| car | PostCode:OX1099 | 
-----------------------------` 

おかげ

答えて

0

のようないくつかの出力を得るために探しています。おそらく正規表現を使ってアプリケーションでこれを行うのが最も簡単ですが、locatesubstringで行うことができます。

SELECT tag, 
substring(body, (locate('[[', body)+2), locate(']]', substring(body, (locate('[[', body)+ 3)))) 
FROM content 
WHERE body LIKE '%[[GridRef:%' 

substringの3番目のパラメータは、我々が0位置と2 ]]秒間3を追加する長さです。

デモ:http://sqlfiddle.com/#!9/d43e1/1

あなたはあなたがPHPでこのようなものを使用することができ、完全な行を返すようにした場合は、

preg_match('/\[{2}(.+?)\]{2}/', 'sometext[[GridRef:St12341234]]moretext', $match); 
print_r($match); 

デモ:https://3v4l.org/7TMKf

正規表現のデモ:https://regex101.com/r/WhalH7/1/

あなたの行に2つ以上の[[]]ペアがある場合は、より詳細にする必要がありますブラケットの位置を確認してください。

+0

こんにちは、それは私が欲しいものを正確に見えますが、それはただ私のためにエラーを引き起こします。私は本当に基本的なバージョンを試しました。 $ sql = 'SELECTタグ、部分文字列(body、3)です。 –

+0

何が原因でエラーが発生しますか? – chris85

+0

一般的なFirefox Webページエラーの写真の使用方法を追加できますか?私は推測したり、ログを調べる必要があります。私が試してみました; // wikka_pages「%のGridRef LIKE \t \t \t最新= "Y" \t \t \t、身体から \t \t \tストリング(ボディ、10) \t \t \tのMySQL $ sqlを=「SELECTタグからのデータを、取得% " \t \t \t ORDER BY ' $ sql_sort_order。 'DESC \t \t \t LIMIT' $ sql_limit; $ result = $ mysqli-> query($ sql);しかし、 'body'は返されません。 –