2011-02-05 26 views
0

私は検索フィールドを持っています。その単一のテキストボックスを使って、ユーザーは名前でギャラリーと画像の両方を探すことができます。私が抱えている問題は、たとえ構文がうまくいてもエラーがなくても、私のクエリで結果を得ることができないようです。良いSQL検索を行うにはどうすればよいですか?

私のグループ名は "Liten gruppe!"で、検索文字列は "liten"です。大文字小文字を区別しない検索の場合、検索文字列と結果文字列の両方が小文字に切り替わります。

文法のなかの何かが、私が期待していないことをしているに違いありません。任意の助け

SELECT `id` 
FROM gallery_groups 
WHERE `name` LIKE LOWER('%$searchstring%') OR 
     `date_created` LIKE LOWER('%$searchstring%'); 

おかげ


EDIT:OK、それは愚かな間違いでした。しかし、補正がまだ結果が得られていない:

SELECT `id` 
FROM gallery_groups 
WHERE LOWER(`name`) LIKE '%$searchstring%' OR 
     LOWER(`date_created`) LIKE '%$searchstring%'; 

EDIT:興味深いです!結果のクエリを直接PhpMyAdminにコピーすると、一致します。しかし、PHPから呼び出されたときには行が返されることはありません。どのようにすることができますか?


編集:OK、実際には1つの結果が返されます。結果内のすべてのフィールドがfetch_objectを(実行している以外の結果がある場合、どのように私はおそらく知ることができ、nullの場合)

object(mysqli_result)[3] 
    public 'current_field' => null 
    public 'field_count' => null 
    public 'lengths' => null 
    public 'num_rows' => null 
    public 'type' => null 

:私は、結果のダンプ出力にだまされましたか?

WHERE `name` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%' OR 
     `date_created` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%'; 

デバッグのためのAS:彼らは見るために、データベースに渡されると、あなたが本当に意図した検索文字列を使用している場合、SQLクエリを印刷してみますがLOWERなしMYSQLに大文字小文字を区別しない検索を発行することができ

+0

検索文字列がクエリに挿入されていますか? –

+0

あなたのコードが生成するクエリを印刷して、PHPの外のデータベースに対して直接実行しようとしましたか?それは通常、簡単に間違いを起こします。 –

+0

@Sarah Happy:はい、私はそれをしました。 @ダン・グロスマン:私はそれをしていない。それを試してみましょう – Hubro

答えて

1

+0

次に、大文字と小文字を区別して検索する方法は?また、文字エンコーディングをUTF8に変更しても文字が壊れることはありませんか? (I.E.、Ø、Å) – Hubro

+1

文字セット(エンコーディング)と照合を混同しないでください。照合は、順序付けを定義するだけです(どの文字が他の文字の前に来るか、そしてどの文字が等しいとみなされるか)。大文字小文字を区別して検索するには、大文字と小文字を区別する照合を使用します。 –

+0

私はUTF8を使う必要はないと付け加えます。 MySQLは30以上のキャラクタセットに対して70以上の照合をサポートしています。 http://dev.mysql.com/doc/refman/5.1/en/charset-charsets.html –

0

これは、クエリが行を返す場合、あなたが見つけるのに役立ちますかどうかわかりません。 しかし、これは私がそれを行う方法です:

$ strSQL = "SELECT id"; $ strSQL。= "FROM gallery_groups"; $ strSQL。= "WHERE LOWER(name)LIKE '%$ searchstring%' OR"; $ strSQL。= "LOWER(date_created)LIKE '%$ searchstring%'";

$ rec = mysql_query($ strSQL、$ oConn);

if(mysql_num_rows($ rec)> 0){ $ strName = mysql_result($ rec、0、 "name"); $ strDateCreated = mysql_result($ rec、0、 "date_created"); }

関連する問題