2012-02-07 12 views
0

私はDrupalモジュールを作成していますが、この質問はDrupal固有ではありません。mysqlクエリで逆ワイルドカードを行う効率的な方法は?

Drupalにはmenu_routerという名前のテーブルがあり、ここで人間にやさしいURLをコンテンツをプルアップできる実際のURLに関連付けます。たとえば:

+--------------------------------------------------------+ 
| admin/config/media/image-styles/edit/%/add/%   | 
| admin/config/media/image-styles/edit/%/effects/%  | 
| admin/structure/types/manage/%/comment/fields/%/delete | 
| admin/structure/types/manage/%/comment/fields/%/edit | 
+--------------------------------------------------------+ 

私は、任意のURLを持っていると私はそれが実際にサイト上で有効なURLにマップすることを確認します。しかし、上記のようにワイルドカード文字列がすでに列の値として存在し、検索条件が一致するため、ワイルドカードクエリを簡単に実行できません。

たとえば、'arbitrary/url/string/'は、DrupalがURLを処理する方法に従って'arbitary/%/string'と一致します。

任意の文字列がワイルドカードのDrupal形式のURLのいずれかと一致するかどうかを照会できる効率的な方法は何ですか?

+0

私はあなたが探しているすべての文字列に一致する "マスター" -regexpがあるとは思わない。おそらく、各文字列に対して異なる正規表現を作成する必要があります。 – alfasin

答えて

0

あなたはmenu_routerの行(つまり、各行のパターンのOR)から1つ大きなパターンを作成して、ターゲットが一致するかどうかを確認することができます。 menu_router内のどの行が一致しているかを知る必要がない限り、それはそのままです。

関連する問題