View Full Version : بازگرداندن نام فیلد ( و یا جدول)
Kamran.K
شنبه 07 آذر 1383, 04:47 صبح
واسه یه موتور جستجوی خاص که روی جداول یک بانک اجرا میکنیم به چه روشی میشه نام ستون و یا نام جدولی که نتایج از آن گرفته شده رو برگرداند، مثلا اگر از یه همچین دستوری استفاده کرده باشیم:
<span dir=ltr>
select * from m , b where m.f1 like '%string1%' or m.f2 like'%string1%' or b.f3 like '%string1%'
</span>
Mohsen_4194
شنبه 07 آذر 1383, 11:14 صبح
نمی دونم این راهی که میگم Optimize هست یا نه اما به هر حال راهه دیگه:
SELECT 'm' TableName, 'f1' FieldName,*
FROM m
where m.f1 like '%string1%'
UNION ALL
SELECT 'm' TableName, 'f2' FieldName,*
FROM m
where m.f2 like '%string1%'
UNION ALL
SELECT 'b' TableName, 'f1' FieldName,*
FROM b
where b.f1 like '%string1%'
البته خودتون شرایط و محدودیت های UNION رو هم باید در نظر بگیرید.
AminSobati
شنبه 07 آذر 1383, 15:24 عصر
کامران جان،
من دقیقا سوال شما رو متوجه نشدم. منظورتون اینه که بدونین هر فیلد از کدوم جدول گرفته شده یا ...؟
Kamran.K
شنبه 07 آذر 1383, 18:37 عصر
(مرسی که وقت میزارین)
دقیقاً. با استفاده از عملگر Like و بکار بردن اون در چند فیلد و چند جدول، عملا خروجی ممکنه از هر قیلد و یا جدولی باشه. موتور جستجوی ما ( که با دلفی و اسه یه سایته) بایست بسته به اینکه نتیجه از کدوم جدول و کدوم فیلدشه واکنش متفاوتی رو نشون میده.
AminSobati
شنبه 07 آذر 1383, 19:42 عصر
کامران جان طبیعتا وقتی Query مینویسین، میدونین که هر فیلد از کدوم جدول داره میاد اما به هر حال میتونین یک نام مستعار یا Alias با پیشوند نام جدول بگیرین تا در کلاینت بدونین هر فیلد متعلق به کدوم جدوله:
select C.CompanyName as 'C_Company', O.OrderDate as 'O_OrderDate' FROM
Customers C JOIN Orders O ON
C.CustomerID=O.CustomerID
Kamran.K
شنبه 07 آذر 1383, 23:11 عصر
... طبیعتا وقتی Query مینویسین، میدونین که هر فیلد از کدوم جدول داره میاد ...
در حالت عادی آره ولی در این حالت خاص با توجه به اینکه اپراتور Like رو داریم و اینکه معلوم نیست عبارت مورد نظر ما در کدوم فیلد و کدوم جدول قرار داره اونوقت قضیه فرق میکنه!
لطفا یکبار دیگه اولین پست این تاپیک رو بخونین! مرسی
AminSobati
یک شنبه 08 آذر 1383, 00:06 صبح
ok! متوجه منظورتون شدم... براتون یک مثال میزنم:
create table MyTable (
Col1 varchar(100),
Col2 varchar(100))
INSERT MyTable values('My sample1','Dummy value1')
INSERT MyTable values('My sample2','Dummy value2')
INSERT MyTable values('Dummy value3','My sample3')
INSERT MyTable values('Dummy value4','My sample4')
select Col1,Col2, case
when Col1 like '%sample%' then 'Found in Col1'
when Col2 like '%sample%' then 'Found in Col2' end as 'Address'
from MyTable
حتی اگر از چند جدول استفاده کرده باشید، بوسیله کدی که در فیلد Address یادداشت میکنین باز هم رد پای رکورد رو میتونین حفظ کنین!
Kamran.K
یک شنبه 08 آذر 1383, 15:21 عصر
روش خوبی است ولی جالب نیست!
اینکه هر سری که نیاز به جستجو داشته باشم بیام از تنامی فیلدهای مورد جستجو، یک جدول بسازم فکر نمی کنم روش جالب و بهینه ای باشه!
مگر اینکه (در صورت ناچاری) یه همچین جدولی رو ایجاد کنیم و در صورتی که هر کدوم از جداول مربوطه تغییری داشتند اون تغییرات رو در این جدول اعمال کنیم. (که این هم حال نمیده)
::در نظر داشته باشید این Query باید روی وب سایت اجرا بشه
AminSobati
یک شنبه 08 آذر 1383, 21:51 عصر
ببخشید! من کی عرض کردم جدول بسازین؟!
این جدول رو من به عنوان نمونه ساختم که ازش Query بگیرم. لطفا به نحوه کاربرد Case توجه کنین
Kamran.K
دوشنبه 09 آذر 1383, 09:34 صبح
Accepted :موفق:
واسه چند جدول هنوز یه مشکل کوچیک هست! یه کم کلنجار میرم باهش، اگه نشد کمک میگیرم.
AminSobati
دوشنبه 09 آذر 1383, 10:03 صبح
کامران جان، فرقی نمیکنه، با Case میتونین هر فیلدی رو از هر جدولی براش آدرس بسازین. سعی کنین، حتما میشه :wink:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.