2016-12-13 14 views
0

私の製品データベースにクエリを実行すると、不完全な結果が得られます(PHPとPhPMyAdminの両方)。LIKEを使用したMySQLクエリで不完全な結果が返される

製品テーブルのサイズは大きくなります(159列、現時点では8000行)。 1つの列に製品タイトル/名前(VARCHAR 255)があります。

これらは製品の一部です:phpMyAdminので

  • ロイヤルクラブワイルドオレンジ
  • ロイヤルクラブビターレモン
  • ロイヤルクラブジンジャーエール
  • ロイヤルクラブトニック

とき私はテーブルを照会します:

私は結果として得る
SELECT * FROM `Nevo_Nutrient_Gehaltes` 
WHERE `Product_omschrijving` LIKE '%royal%' 
ORDER BY `Product_omschrijving` ASC 

  • ロイヤルクラブワイルドオレンジ

ではなく、他の製品...

のphpMyAdminで私はテーブルのクエリを実行したとき:

SELECT * FROM `Nevo_Nutrient_Gehaltes` 
WHERE `Product_omschrijving` LIKE '%club%' 
ORDER BY `Product_omschrijving` ASC 

私は結果として得る:

  • ロイヤルクラブワイルドオレンジ
  • ロイヤルクラブビターレモン
  • ロイヤルクラブジンジャーエール
  • ロイヤルクラブトニック
のphpMyAdminで

私はテーブルをクエリ:

SELECT * FROM `Nevo_Nutrient_Gehaltes` 
WHERE `Product_omschrijving` LIKE '%bitter%' 
ORDER BY `Product_omschrijving` ASC 

私は結果として得ます: 商品はありません...

根本的な問題が何であるか考えている人はいますか?

私は何が起こっているのか把握しようとしています。 データベースの設定や列数の設定があるかもしれませんか?

ほか(月4日2017)

また、私は(jQueryのオートコンプリートで)予測検索機能では、この表を使用しています。あなたはavailableTagsフィールドはMySQLのテーブルに「Nevo_Nutrient_Gehaltes」であるすべての製品が含まれていることを確認できるページのソースを表示すると

http://www.personalbodycenter.nl/zzz_predictive_search.php

:私はここにストリップダウンバージョンを入れています。

フィールドに「royal」と入力すると、PhPMyAdminで直接テーブルにクエリを実行すると、同じ9(不完全、17個)の結果が得られます。

テキストフィールドに "club"と入力すると、テーブルからすべての値を取得できます。リストに「ロイヤル」と表示されていることがわかりますあなたは "ロイヤル"とタイプすると、これらも出てくるはずです!

どのように同じ不完全な結果が、mysqlクエリとjquery関数を介して表示されますか?私は間違っている可能性がありますが、情報にアクセスするこれらの異なる方法は関連していてはなりませんか?

私はすでにデータベースエンジンを変更し、照合を変更し、2列にテーブルを減らすことにより、phpMyAdminの中のテーブルで実験をたくさんでしたが、運は、これまで...

私は、データベースを置いていません私がPhPMyAdmintoにログインしてこのテーブルを見て、ここで何が起こっているのかを知ることができたら、私はログインの詳細を提供することができます...

+1

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

テーブルのスキーマを表示するのに役立つかもしれません。私の推測では、この問題はテーブルが格納されている文字セット/照合と関係しているということです。 –

+1

私の推測では 'Product_omschrijving'には、商品のタイトルではなく「説明」のように、あなたが探している言葉が含まれていません。おそらくそれを別の列に変更する必要がありますか? – cmorrissey

答えて

0

:あなたは、次のクエリを試みることができます。主に

私はそれがあったPHPの文字列をエンコードするためにはutf8_encodeを使用する場合(たとえば、データ分割の言葉でぞっとした特定の隠された「ノーブレークスペース」文字:RoyÂalを

これらの文字は、phpMyAdminのにinvissibleました(!)、不完全な結果(例えば、LIKE '%Royal%'がそれらを破棄したクエリ)を引き起こしていました。

follow up question hereこれらの隠し文字を処理する方法を投稿しました。

1

デフォルトでは、LIKEは大文字と小文字を区別した比較。たぶんあなたの列の値が異なる場合があります。掘りや実験時間の多くは、私がここに根本的な問題は、MySQLのテーブル内の隠された文字があることを発見した後

SELECT 
    * 
FROM 
    Nevo_Nutrient_Gehaltes 
WHERE 
    lower(Product_omschrijving) LIKE '%royal%' 
ORDER BY 
    Product_omschrijving ASC 
+2

文字列が大文字小文字を区別する文字セットのデータベースに格納されている場合は、大文字と小文字が区別されます。 [docs](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html)から: "オペランドの1つが大文字と小文字を区別しない限り、文字列の比較では大文字と小文字は区別されません大文字小文字を区別する照合を使用するか、バイナリ文字列です) " –

+0

同意します。しかし、私たちはまだテーブル構造を知らない。 –

+0

ご返信ありがとうございますが、大文字と小文字の区別は私が既に試した問題ではありません –

関連する問題