PDA

View Full Version : تفاوت قائل شدن بین حروف بزرگ و گوچک در جستجو



mohammad-gh
دوشنبه 02 اسفند 1389, 20:44 عصر
با سلام
تکه کدی برای جستجو نوشتم تا بین کلمات جستجو را با توجه به متن ورودی در تکس باکس انجام بده
اما با فرض اینکه در متن کلمه Iran باشد وقتی کاربر iran رو جستجو میکنه نشون نمیده و باید حتما دقیقا همون Iran رو بنویسه تا جزء نتایج بیاد
این هم کد من
$cat همون متن وروی کاربر است

$catquery="namefa like '%$cat%' or nameen like '%$cat%' or kar like '%$cat%' or tozih1 like '%$cat%' or tozih2 like '%$cat%'and";

amir001
دوشنبه 02 اسفند 1389, 23:55 عصر
این علامت % برای چی هست؟؟ قراره کانکت کنه؟؟؟؟

میشه تابع جست جو را هم قرار بدید؟؟ یا اینکه منظورتون از این، کوئری برای دیتا بیس هست؟؟

sattaryekta
سه شنبه 03 اسفند 1389, 13:02 عصر
در MySQL: ارتباطی به کوئری نداره. به Collation دیتابیس بستگی داره.
مثلا اگر latin1_general_cs را به latin1_general_ci تغییر دهی، مشکل را حل کرده ای.

mohammad-gh
پنج شنبه 05 اسفند 1389, 18:15 عصر
این علامت % برای چی هست؟؟ قراره کانکت کنه؟؟؟؟

دوست عزیز % برای اینه که اگر کلمه مورد جستجو در ابتدا , وسط یا انتهای متن هم باشد بتواند پیدا کند

ر MySQL: ارتباطی به کوئری نداره. به Collation دیتابیس بستگی داره.

من زیاد متوجه منظورتون نشدم , ولی باز تیبل رو از latin1_swedish_ci بهlatin1_general_ci وحتی utf8_general_ci تغییر دادم ولی مشکل حل نشد

binyaft
پنج شنبه 05 اسفند 1389, 18:32 عصر
این یک راه حل هست ، اما مطمئنا" بهترش هم هست ;)


$query = "SELECT * FROM myTable WHERE UPPER(username) = UPPER('$_GET[user]')";

sattaryekta
پنج شنبه 05 اسفند 1389, 19:45 عصر
تیبل رو از latin1_swedish_ci بهlatin1_general_ci وحتی utf8_general_ci تغییر دادم ولی مشکل حل نشد
تفاوت بین CI و CS آخرشون هست
CI = case insensitive
CS = case sensitive

MMSHFE
شنبه 07 اسفند 1389, 07:41 صبح
با سلام، اين راه رو امتحان كنيد:


$ucat=strtoupper($cat);
$ucatquery="upper(namefa) like '%$ucat%' or upper(nameen) like '%$ucat%' or upper(kar) like '%$ucat%' or upper(tozih1) like '%$ucat%' or upper(tozih2) like '%$ucat%' and";

اميدوارم مشكلتون برطرف بشه.
موفق و مؤيد باشيد.

tux-world
شنبه 07 اسفند 1389, 09:59 صبح
فکر کنم همچین چیزی منظورشه: SCripT یا sCRipt

sattaryekta
شنبه 07 اسفند 1389, 11:47 صبح
چرا شما یک راهی ارائه نمیدهید که مشکل را از ریشه برطرف کند.


$ucat=strtoupper($cat);
$ucatquery="upper(namefa) like '%$ucat%' or upper(nameen) like '%$ucat%' or upper(kar) like '%$ucat%' or upper(tozih1) like '%$ucat%' or upper(tozih2) like '%$ucat%' and";

این کد جواب میده و مطمئنه. ولی مشکلش اینه که یک php و چند تابع mysql را وارد کوئری کرده اید و کوئری طولانی شده. در حالی که خود mysql برای اینکار امکانات بسیار مفیدی قرار داده. این کد مثل اینه که شما هربار که سردرد گرفتی یک مسکن بندازی بالا، ولی نری دنبال این که بفهمی منشأ این سردرد کجاست و سردرد را از ریشه حل کنی.
برای حل این مشکل کافیست Collation فیلد مورد نظر از latin1_general_ci به latin1_general_cs تغییر کند! یا برعکس

mohammad-gh
دوشنبه 09 اسفند 1389, 11:02 صبح
متشکرم از همه دوستان
مشکل من با تبدیل کالکشن فیلدها (نه کالکشن تیبل) از utf8_bin به utf8_general_ci حل شد