2016-05-10 2 views
1

この問題の解決策は簡単ではないと思いますが、その周りに良い方法は見つけられません。MySQLの列(ポストコード)の部分的な値で完全な文字列を一致させる

私は英国の郵便番号で働いています。マイ参照DBは次のようになります。

+----+----------+----------+ 
| ID | postcode | leadtime | 
+----+----------+----------+ 
| 1 | AB10  |  1 | 
| 2 | AB11  |  2 | 
| 3 | B7  |  3 | 
| 4 | SE16WD |  1 | 
+----+----------+----------+ 

この表の値は唯一、完全な英国の郵便番号の最初の半分を表し、それは我々が反対確認する必要があるすべてです。

ユーザーは、完全な郵便番号を入力してリードタイムを確認できるフォームを作成しました(完全な郵便番号は配送先住所の一部として使用されます)。

英国のポストコードは、長さが異なることがあり、最初と後半の間にスペースを入れてもしなくてもかまいません。今、私は基本的にユーザーが入力したものをとり、さまざまなレイアウトの可能性をすべて試してみようとするPHPコードをいくつか持っていますが、それは必ずしも機能しません。

私は、MySQLでこれを行う方法を探しています。私は

SELECT leadtime FROM myTable WHERE postcode LIKE '$postcode%' 

しかし、最初の数桁のため、この作品だけで遊んで始めました。ユーザーが郵便番号全体を入力すると、このクエリはテーブル内で何も検索しません。

私は私の人生ではありません、私は2つの値に一致する方法を見つける!

私は本当にここに何かが欠けていると確信しています!

お時間をいただきありがとうございます。

照合する参照郵便番号の種類をよりよく反映するように、MySQLテーブルを編集しました。

+0

スワップ干し草の山で針を試してみてください。 – Strawberry

+0

@Strawberryより具体的なことができますか?ありがとう! – matteodallombra

+0

私の更新された答えを試してください@matteodallombra – JYoThI

答えて

3
SELECT * FROM user; 
+---------+--------+ 
| user_id | user | 
+---------+--------+ 
|  3 | George | 
|  1 | John | 
|  2 | Paul | 
|  4 | Ringo | 
+---------+--------+ 

SELECT * FROM user WHERE 'Ringo Starr' LIKE CONCAT(user,'%'); 
+---------+-------+ 
| user_id | user | 
+---------+-------+ 
|  4 | Ringo | 
+---------+-------+ 
+0

シンプルでエレガントで効率的!私はあなたがそれをすることができるとは思わなかった!クイックヘルプをありがとう! – matteodallombra

0

空白から郵便番号を取り除き、DBの「郵便番号」フィールドとその郵便番号の4文字の部分文字列を比較する以外の方法はありません。

+0

これは私が今やっていることですが、その問題は、郵便番号を確実に壊すことが困難になるということです。最初の4桁または最初の3桁をチェックしなければならない場合があり、この方法はすぐに非常に効率が悪くなります。 – matteodallombra

0

あなたいつでもできます。

  • substr($postcode, 0,2)を使用して、「広い」の選択を行います。
  • 結果をループし、正規表現を使用して各結果の先頭からアルファベット文字を削除します。 intval()を使用して数値文字列をnumberに解析します。
  • 最後に数値範囲の比較を行って結果を絞り込みます。

上記の手法はもう少し複雑かもしれませんが、最終結果をより詳細に管理できます。

これを達成する方法のコード例が必要な場合は、親切にコメントしてください。回答を更新します。

0

はワイルドカードで、この

置き換えるスペースのような

select USERNAME FROM LOGIN_USERS WHERE USERNAME LIKE CONCAT('%',REPLACE('user_inPut',' ','%'),'%'); 
関連する問題