1

私はチュートリアルを読んでいますが、新しいことは何も学んでいません。私は顧客のテーブルを持っています。顧客の姓名は別々の列に格納されます。名前、姓、または両方で顧客を検索できるクエリを作成したいと考えています。

これが私が持っているものです:

$queryyy = "
    SELECT *
    FROM `customers`
    WHERE
        `first_name1` LIKE '".mysql_real_escape_string($_GET['custname'])."%'
        OR `last_name1` LIKE '%".mysql_real_escape_string($_GET['custname'])."'
        AND `status` = 'active'
    LIMIT 6
"; 

"Lindsay Thompson" を検索したい場合は、"lindsay" または "Thompson" をクエリして必要な結果を取得できますが、"lindsay thompson" をクエリしても何も得られません。

ワイルドカードのポイントを見逃しているか、適切に使用していないように感じます。誰かが私にこれを説明し、私のクエリを修正してください..

ありがとう

4

3 に答える 3

4

ワイルドカードは、「任意の数の任意の文字」を表すために導入されています (の場合%)。

そう

col LIKE '%foo'

foovalue とvalueが一致しbarfooます。

あなたが望むのは実際には反対です.2つの列を連結し、それがリクエストと等しいかどうかを確認する必要があります.

CONCAT(first_name, ' ', last_name) = 'foo bar'
于 2013-02-23T08:09:46.367 に答える
2

% ワイルドカードは、任意の数の文字と一致します。ページhttp://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html D%i%に示されている例を使用すると、David.

あなたが抱えている問題は、 または のいずれLindsayThompsonを検索していることです%Lindsay Thompson。つまり、いずれかの名前の後にフルネームが続く任意の数の文字を検索します。したがって、これは決して一致しません。

1 つのオプションは、2 つの名前の連結された文字列に対してクエリを実行することです。

SELECT * from customers WHERE CONCAT(first_name1, ' ', last_name1) LIKE '%" .mysql_real_escape_string($_GET['custname']). "%' AND status= 'active' LIMIT 6";

于 2013-02-23T08:13:24.913 に答える
-1

これを試してください、それがあなたに役立つことを願っています

 $queryyy = "SELECT * FROM `customers`
             WHERE (`first_name1` LIKE '".mysql_real_escape_string($_GET['custname'])."%' 
             OR `last_name1` LIKE '%".mysql_real_escape_string($_GET['custname'])."') 
             or concat(`first_name1`,' ',last_name1`) 
             LIKE'".mysql_real_escape_string($_GET['custname'])."%' 
             AND `status` = 'active' LIMIT 6"; 
于 2013-02-23T08:20:56.987 に答える