mysql:6843
From: "3web" <"3web" <dvh52252@xxxxxxxxxx>>
Date: Sun, 12 Jan 2003 18:00:14 +0900
Subject: [mysql 06843] Re: 数字以外の文字を含む範囲検索
いつも読んでばかりのmasahikoと言います。 > 例えば商品番号というものがあり、範囲でもってひとつの商品としています。 > 具体的には、hin_fr 、hin_to 、hin_name というフィールドで、順に、 > > 1234 1240 AAAA ちょっと変な感じがします。 1234から1240までの商品はAAAAである。 と言うことを一つのレコードで表現する・・・のは。 ひょっとすると色違い、サイズ違いの商品があってもそれらは同じ商品としてくくっ ている、ということなのかなあ。 でもサイズとか何らかの違いを示すデータはないんでしょうか。 データそのものがよく判らないです。 > > 「1234から1240の商品番号は、AAAA という商品名である」 > ということになります。つまり、商品名の検索機能があったとして、 > 「1238」と入力し検索すると、「AAAA]という商品名を拾わないといけませ ん。 > 単純に、範囲検索を行えばいいのですが、 > 商品番号がすべて数字だった場合、それで問題ないのですが、 > 商品番号には英字やカナが入っている場合があります。 > > DD9900 DD9950 BBBB > > といったような商品番号の場合、商品検索で「DD9931」と入力した場合、 > やはり「BBBB」を拾わないといけません。 > この場合、たとえばDD9900からDD9950の場合、DD99の前の部分は共通である、という ことですか? つまり、仮にDD98という文字列を前に持っている場合、それは明らかに違う商品であ る。 という約束事になっているのでしょうか。 なんらかの、一目して識別できるルールがあると思いますが。 > 数字だけ範囲検索するように、 うーん、数字だけといっても、これ文字列ですよ。ひとつのフィールドには分解でき ない要素をいれるのが基本のような。 設計の段階で例外を持たせる場合もあるでしょうけど、はっきりした目的があれば。 > > SELECT hin_name FROM tbl_hin WHERE hin_fr >= DD9931 AND hin_to <= DD9931 > > とした場合、意図した検索結果にならない場合があるようです。 > > > 商品番号に数字以外が入っているので、商品番号のフィールド型は > varchar でもたせています。 初めの部分で、共通の文字列をその商品に設定していれば、仮に DD9900 DD9950 上記でDD99が共通の約束事であれば SELECT hin_name FROM tbl_hin WHERE hin_fr like 'DD99%' これでOKだと思います。 うーん、しかし・・・検索時点でDD99ということは・・・・後方2文字を無視して検 索することになるか。 こうなるとDD9900、DD9950というデータを持つ意味無いですね。 ひとつのカラムで、DD99を持てばいいことになるし。 結局詳細がわからないと、こんな感じですけど。
6842 2003-01-12 17:30 [Koji Yamamoto <yamam] 数字以外の文字を含む範囲検索 -> 6843 2003-01-12 18:00 ┣["3web" <dvh52252@xxx] 6845 2003-01-12 18:31 ┃┗[Koji Yamamoto <yamam] 6846 2003-01-12 19:37 ┃ ┣["3web" <dvh52252@xxx] 6852 2003-01-13 14:23 ┃ ┗[Hiromi Kurita <youji] 6844 2003-01-12 18:20 ┣[Shinya Kawaji <kawaj] 6853 2003-01-13 23:35 ┃┗[Koji Yamamoto <yamam] 6855 2003-01-14 02:03 ┃ ┗[とみたまさひろ <tomm] 6851 2003-01-13 13:31 ┗["3web" <dvh52252@xxx] 6854 2003-01-13 23:49 ┗[Koji Yamamoto <yamam]