1

列に URL を含むデータベース テーブルがあります。ユーザーが表示しているページに応じて特定のデータを表示したいのですが、直接一致しない場合はデフォルトで「親」ページになります。値が送信された URL の一部である列を見つけるにはどうすればよいですか?

例えば。www.example.com/foo/bar/baz/here.html があります。(列値の長さでソートした後):

  • www.example.com/foo/bar/baz/here.html
  • www.example.com/foo/bar/baz
  • www.example.com/foo/bar
  • www.example.com/foo
  • www.example.com

もちろん、これらすべての URL がテーブルにある場合。

組み込み関数はありますか、それともプロシージャを作成する必要がありますか? グーグルは、私が必要としているものではない、LIKE と REGEXP を取得し続けました。URL を切り刻んで複数のクエリを作成するよりも、単一のクエリの方がはるかに効率的であると考えました (URL には多くのパス コンポーネントが含まれる可能性があります)。

4

1 に答える 1

1

「Like」演算子を簡単に変える:

SELECT * FROM urls WHERE "www.example.com/foo/bar/baz/here.html" LIKE CONCAT(url, "%");

http://sqlfiddle.com/#!2/ef6ee/1

于 2013-09-06T18:13:34.437 に答える