PDA

View Full Version : پیدا کردن "نام نام خانوادگی" در فیلد های "نام" ، "نام خانوادگی"



tabib_m
سه شنبه 16 اسفند 1384, 21:34 عصر
با سلام
یک تیبل با دو فیلد داریم با نام های زیر:

name
family

دو تا رکورد هم توی این تیبل هست با مقادیر زیر :




1:
name: ali
family: haeri

2:
name: ali reza
family: haeri

حالا فرضا یک نفر میخواد عبارت "ali haeri" رو جستجو کنه، من هم میخوام فقط و فقط رکورد اول نمایش داده بشه
چیکار باید بکنم؟

arshia_
چهارشنبه 17 اسفند 1384, 07:33 صبح
اگر منظورت این است که جستجوی دقیق باشه این کد رو امتحان کن:
SELECT * FROM TBLTEST WHERE NAME LIKE 'ALI' AND FAMILY LIKE 'HAERI' <----CODE
یا این روش :
SELECT * FROM TBLTEST WHERE NAME = 'ALI' AND FAMILY= 'HAERI'

mzjahromi
چهارشنبه 17 اسفند 1384, 07:56 صبح
ببین این کد جوابت رو میده


Select * From TableName Where (Name+' '+Family)='ali haeri'

tabib_m
چهارشنبه 17 اسفند 1384, 12:54 عصر
اگر منظورت این است که جستجوی دقیق باشه این کد رو امتحان کن:
SELECT * FROM TBLTEST WHERE NAME LIKE 'ALI' AND FAMILY LIKE 'HAERI' <----CODE
یا این روش :
SELECT * FROM TBLTEST WHERE NAME = 'ALI' AND FAMILY= 'HAERI'

بابا دست شما درد نکنه! قراره یک نفر توی یک فیلد تکست (مثلا) عبارت "ali Haeri" رو سرچ کنه!
من از کجا باید بفهمم کدوم نامه و کدوم فامیل؟ (یعنی اگه مثلا یارو جستجو کنه : "سید علی رضا طبیب زاده" چجوری میشه فهمید کدوم قسمت نام و کدوم قسمت فامیله؟)


ببین این کد جوابت رو میده

کد:
Select * From TableName Where (Name+' '+Family)='ali haeri'

خیلی ممنون از پاسختون ، ولی اینم جواب نداد! یعنی هر دو رکورد رو آورد!!!! (من انتظار داشتر ارور بده) :)

reza_rad
چهارشنبه 17 اسفند 1384, 13:05 عصر
خیلی ممنون از پاسختون ، ولی اینم جواب نداد! یعنی هر دو رکورد رو آورد!!!! (من انتظار داشتر ارور بده) :)

خوب اول و آخر ورودی یه کاراکتر بذار و بعد چکش کن اینجوری دیگه می بندیش.

mzjahromi
چهارشنبه 17 اسفند 1384, 13:44 عصر
خیلی ممنون از پاسختون ، ولی اینم جواب نداد! یعنی هر دو رکورد رو آورد!!!! (من انتظار داشتر ارور بده) :)

مطمئنی این Query هر دو رکورد رو آورد؟؟؟؟؟؟؟؟؟
مگه همچین چیزی ممکنه؟؟؟؟؟

tabib_m
شنبه 20 اسفند 1384, 20:41 عصر
خوب اول و آخر ورودی یه کاراکتر بذار و بعد چکش کن اینجوری دیگه می بندیش.

یعنی جی؟

مطمئنی این Query هر دو رکورد رو آورد؟؟؟؟؟؟؟؟؟
مگه همچین چیزی ممکنه؟؟؟؟؟
منم از همینش تعجب کردم!!!!
خوب خودت خیلی سریع میتونی با phpmyadmin تست کنی!

reza_rad
یک شنبه 21 اسفند 1384, 06:51 صبح
یعنی جی؟



منظورم این بود که برای اینکه دنباله ی رشته کاراکترت رو ببندی از یه کاراکتر در دو طرفش استفاده کن. مثلا * یا هر چیز دیگه. البته شاید راه خوبی نباشه ولی فکر کنم جواب بده:


Select * From TableName Where ('*'+Name+' '+Family+'*')='*ali haeri*'

tabib_m
جمعه 04 فروردین 1385, 18:23 عصر
بازم هر دو رو آورد :)

tabib_m
چهارشنبه 09 فروردین 1385, 19:03 عصر
دوستان راه دیگه ای سراغ ندارن؟

mzjahromi
چهارشنبه 09 فروردین 1385, 19:22 عصر
میشه کدی رو که استفاده می کنید عینا اینجا بنویسیدش؟

alirezador
پنج شنبه 10 فروردین 1385, 14:08 عصر
دوست عزیز از اونجایی که من فهمیدم شما میگید که اگر هر دو تا مشخصات در یک textbox داده میشه که این عملا غیر ممکنه چون این غضیه سیستم های خبره هستش که با استفاده از پردازش کاراکتری حدث بزنه که کدام قسمت اسم و کدام قسمت فامیل هستش اگر در دو text box جداگانه اسم و فایل را بگیری و دنبالش بگردی یعنی select کنی حتما به نتیجه میرسی و دنبال اون یکی هم نگرد چون باید پروفسر تشنه لب یا دکتر میر محسنی و یا دکتر شهریار لطفی را باید ببینی و این پروژه دکترا هستش

tabib_m
پنج شنبه 10 فروردین 1385, 15:17 عصر
میشه کدی رو که استفاده می کنید عینا اینجا بنویسیدش؟
منظورت رو نمیفهمم. چه کدی رو باید اینجا بنویسم؟ بحث فقط بحث یک select ه.


دوست عزیز از اونجایی که من فهمیدم شما میگید که اگر هر دو تا مشخصات در یک textbox داده میشه که این عملا غیر ممکنه چون این غضیه سیستم های خبره هستش که با استفاده از پردازش کاراکتری حدث بزنه که کدام قسمت اسم و کدام قسمت فامیل هستش اگر در دو text box جداگانه اسم و فایل را بگیری و دنبالش بگردی یعنی select کنی حتما به نتیجه میرسی و دنبال اون یکی هم نگرد چون باید پروفسر تشنه لب یا دکتر میر محسنی و یا دکتر شهریار لطفی را باید ببینی و این پروژه دکترا هستش
فکر کنم درست منظور من رو متوجه نشدی. چون من دنبال این نیستم که اسم و فامیل رو جدا کنم!! من فقط میخوام ، دو تا فیلد با هم ترکیب بشن و بعد عبارت مورد نظر توی اون فیلد جستجو بشه. دیگه نمیدونم چجوری توضیح بدم.

alirezador
پنج شنبه 10 فروردین 1385, 19:32 عصر
شما منظورت اینه که کل کلمه مثلا " علیرضا دوراندیشیان " در یک text box داده بشه و تو بفهمی که " علیرضا " اسم طرفه و " دوراندیشیان " فامیل بعد اونها را از هم جدا کنی و بعد تو 2 تا متغیر قرار بدی و در 2 فیلد جدا گانه دنبال اونها بگردی درسته؟

nematia
جمعه 11 فروردین 1385, 01:49 صبح
شاید با concat به نتیجه برسی

alirezador
جمعه 11 فروردین 1385, 11:35 صبح
منظورتون از concat چی هستش یک جایی خونده بودم ولی یادم رفته فکر کنم مباحثه جاوا باید باشه

nematia
جمعه 11 فروردین 1385, 14:42 عصر
راهنمای MySQL رو ببینید

tabib_m
جمعه 11 فروردین 1385, 20:30 عصر
شما منظورت اینه که کل کلمه مثلا " علیرضا دوراندیشیان " در یک text box داده بشه و تو بفهمی که " علیرضا " اسم طرفه و " دوراندیشیان " فامیل بعد اونها را از هم جدا کنی و بعد تو 2 تا متغیر قرار بدی و در 2 فیلد جدا گانه دنبال اونها بگردی درسته؟

نه درست نیست.
اینی که تو میگی یک راه حل هست ، و کار من رو هم راه میندازه ، اما موفقیت این راه حل تقریبا محاله، چون تشخیص نام از نام خانوادگی کار آسونی نیست.

من فقط میخوام یک عبارت ، در دو فیلد به صورت مشترک جستجو بشه. یعنی انگار که (تأکید میکنم : انگار که) یک فیلد وجود داره ، و اینطوری میتونیم بنویسیم:



select * from `table_name` where `NameFamily`='$search';


امیدوارم دیگه ایندفعه منظورم رو فهمیده باشی.


شاید با concat به نتیجه برسی

به راهنمای مای اس کیو ال هم مراجعه کردم ، اما چیز زیادی نفهمیدم ، ببخشید ، انگلیسیم ضعیفه . :خجالت:

nematia
شنبه 12 فروردین 1385, 00:06 صبح
این کتاب جالب تر توضیح داده:
OReilly - MySQL Cookbook.chm

3.6 Combining Columns to Construct Composite Values
3.6.1 Problem
You want to display values that are constructed from multiple table columns.

3.6.2 Solution
One way to do this is to use CONCAT( ). You might also want to give the column a nicer name by using an alias.

3.6.3 Discussion
Column values may be combined to produce composite output values. For example, this expression concatenates srcuser and srchost values into email address format:

CONCAT(srcuser,'@',srchost)
Such expressions tend to produce ugly column names, which is yet another reason why column aliases are useful. The following query uses the aliases sender and recipient to name output columns that are constructed by combining usernames and hostnames into email addresses:

mysql> SELECT
-> DATE_FORMAT(t,'%M %e, %Y') AS date_sent,
-> CONCAT(srcuser,'@',srchost) AS sender,
-> CONCAT(dstuser,'@',dsthost) AS recipient,
-> size FROM mail;
+--------------+---------------+---------------+---------+
| date_sent | sender | recipient | size |
+--------------+---------------+---------------+---------+
| May 11, 2001 | barb@saturn | tricia@mars | 58274 |
| May 12, 2001 | tricia@mars | gene@venus | 194925 |
| May 12, 2001 | phil@mars | phil@saturn | 1048 |
| May 13, 2001 | barb@saturn | tricia@venus | 271 |
...

alirezador
شنبه 12 فروردین 1385, 11:30 صبح
اگر شما سورس برنامه html و php را اینجا بزارین مشکل حل میشه من فکر میکنم مشکل شما مفاهیم data base management هستش

tabib_m
شنبه 12 فروردین 1385, 14:21 عصر
mysql> SELECT
-> DATE_FORMAT(t,'%M %e, %Y') AS date_sent,
-> CONCAT(srcuser,'@',srchost) AS sender,
-> CONCAT(dstuser,'@',dsthost) AS recipient,
-> size FROM mail

راستش رو بخواید من از این نوع سلکت چیزی سر در نمیارم :خجالت: .
در مورد متن انگلیسی هم که گفتم . بازم :خجالت: .
اگه میتونید *خودتون* توضیح بدید ، خیلی ممنون میشم.


اگر شما سورس برنامه html و php را اینجا بزارین مشکل حل میشه من فکر میکنم مشکل شما مفاهیم data base management هستش

من دیگه واقعا نمیدونم چجوری شیر فهمت کنم.
عزیز دل من ، من فقط با یک تیبل و یک سلکت کار دارم ، همین.
من تستم رو دارم توی phpmyadmin انجام میدم.
سؤالی که من اینجا پرسیدم از این حد خارج تر نیست.
من یک تیبل دارم ، با فیلدها و مقادیری که گفتم، و حالا میگم چجوری باید دستور سلکت رو بدم که اون نتیجه ی مطلوب رو بدست بیارم.

خیلی ممنون.

tabib_m
شنبه 19 فروردین 1385, 01:01 صبح
کسی از دوستان راهی سراغ نداره؟

I,Nobody
یک شنبه 21 خرداد 1385, 09:07 صبح
اول اون فیلدهای name و family رو توی تیبلت FULLTEXT کن. بعدش این رو تست کن :


SELECT * FROM `mytable` WHERE MATCH(name,family) AGAINST('%$SERACH%' WITH QUERY EXPANSION)

tabib_m
دوشنبه 22 خرداد 1385, 19:56 عصر
جواب نداد. :(

یعنی ارور داد.



Database test - table fam running on localhost

Error

SQL-query :

SELECT * FROM `fam` WHERE MATCH(name,family) AGAINST('%ali heidari%' WITH QUERY EXPANSION) LIMIT 0, 30

MySQL said:

Something is wrong in your syntax près de 'WITH QUERY EXPANSION) LIMIT 0, 30' à la ligne 1

I,Nobody
سه شنبه 23 خرداد 1385, 06:37 صبح
ورژن mysqlت چنده؟
اگه زیر 4.1 هست، اون عبارت WITH QUERY EXPANSION رو بردار

reza_rad
سه شنبه 23 خرداد 1385, 06:40 صبح
از CONCAT(str1,str2,...) استفاده کردی یا نه؟
مثال:


mysql> SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'


به اینجا هم یه نگاهی بنداز ببین مشکلت رو حل می کنه؟
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

I,Nobody
سه شنبه 23 خرداد 1385, 07:23 صبح
ای ول.
رضا کمک خوبی کرد.
اینو تست کن :


SELECT CONCAT_WS( ' ', first_name, last_name ) AS full_name
FROM `my_table`

reza_rad
سه شنبه 23 خرداد 1385, 07:56 صبح
من اینو تست کردم:


SELECT *
FROM ali
WHERE (

SELECT concat( name, ' ', family )
) = 'ali haeri'



جواب میده :)

tabib_m
سه شنبه 23 خرداد 1385, 08:51 صبح
ورژن mysqlت چنده؟
اگه زیر 4.1 هست، اون عبارت WITH QUERY EXPANSION رو بردار

ورژن مای اس کیو ال من اینه : 3.23.49-max-nt
اون عبارت رو هم برداشتم ، این دفعه هر دو رکورد رو اورد. :(


ای ول.
رضا کمک خوبی کرد.
اینو تست کن :

کد:
SELECT CONCAT_WS( ' ', first_name, last_name ) AS full_name
FROM `my_table`

این هم جواب نداد :( . یعنی یک نتیجه ی عجیبی (برای من) داشت . به تصویر ضمیمه نگاه کنید.


SELECT *
FROM ali
WHERE (

SELECT concat( name, ' ', family )
) = 'ali haeri'

این رو هم تست کردم و ارور زیر رو داد :

Error

SQL-query :

SELECT * FROM `fam` WHERE (SELECT concat( name, ' ', family )
) = 'ali haeri' LIMIT 0, 30

MySQL said:


Something is wrong in your syntax près de 'SELECT concat( name, ' ', family )
) = 'ali haeri' LIMIT 0, 30' à la ligne 1



البته فکر میکنم این مشاکل به خاطر ورژن مای اس کیو ال باشه .
در هر حال از کمک همه تون خیلی خیلی ممنونم.

در ضمن ، لینکی که آقای راد دادن خیلی باحال بود ، دستتون درد نکنه :)

reza_rad
سه شنبه 23 خرداد 1385, 09:39 صبح
خواهش می کنم.
طبیب جان mysql ورژن بالاتر نصب کن خوب. اینجوری خیلی محدود میشی ها!

بعدش هم اینو تست کن :


SELECT concat( name, ' ', family ) = 'ali haeri'
FROM ali


دستور concat توی ورژنی که داری هم کار باید بکنه.

tabib_m
سه شنبه 23 خرداد 1385, 17:02 عصر
خیلی ممنون.
باز هم یک نتیجه ی عجیب دیگه! :(

oxygenws
سه شنبه 23 خرداد 1385, 20:46 عصر
نتیجه اش عجیب نیست...
نسخه MySQL شما قدیمی است و subselect رو پشتیبانی نمی کنه، البته نیازی هم به استفاده از subselect نیست!!!
این رو تست کن:


SELECT * FROM table_name
WHERE CONCAT(name, ' ', family) = 'ali haeri'


خوش باشی :)

tabib_m
سه شنبه 23 خرداد 1385, 20:54 عصر
ایول
خیلی خوشم اومد، درست شد
:لبخند: :لبخند: :لبخند:
:تشویق: :تشویق: :تشویق:
واقعا دست شما درد نکنه
برای من شده بود یک دردسر
باز هم ممنون
امیدوارم در تمامی مراحل زندگیتون همچنان موفق و سربلند باشید :)

reza_rad
چهارشنبه 24 خرداد 1385, 07:16 صبح
از هم یک نتیجه ی عجیب دیگه!

نتیجه عجیب نبود درست بود!
like وقتی روی رکورد ها اعمال میشه سطرهای درست رو 1 و غلط ها رو 0 برمی گردونه.

tabib_m
چهارشنبه 24 خرداد 1385, 07:50 صبح
به هر حال از تمامی دوستان به خاطر کمکی که کردن ممنونم.


پ.ن: میبخشید فضولی میکنم، آقایون reza_rad و oxygenws با هم نسبتی دارید؟؟

reza_rad
چهارشنبه 24 خرداد 1385, 08:03 صبح
خواهش می کنم :)



آقایون reza_rad و oxygenws با هم نسبتی دارید؟؟

نسبت که نه. ولی امیدجان استاد ما هستند:)

oxygenws
چهارشنبه 24 خرداد 1385, 11:15 صبح
چوب کاری نفرمایید...
سپاسگذارم.