ورود

View Full Version : جستجو کالا



MahmoodM30
دوشنبه 03 اردیبهشت 1403, 23:30 عصر
سلام دوستان چجوری میتونم کوئری بنویسم که کالا ها رو به شکل زیر جستجو کنم

مثلا جستجو کنم "لولا برنجی" از لیست بره سرچ کنه و برام این فیلد رو نشون بده "لولا آرام بند جک برنجی 7 فنره STD"
یا جستجو کنم "لولا کلیپس" همه اینا رو بیاره

لولا ارام بند با کلیپس موشکی اکس
لولا ارام بند بدون کلیپس
لولا ارام بند بدون کلیپس TURK برنجی
لولا ارام بند بدون کلیپس آما
لولا ارام بند بدون کلیپس اکس
لولا ارام بند بدون کلیپس بازل

155646

به شکل های مختلف جستجو LIKE , CONTAINS و .... میکنم نمیاره

ممنون میشم دوستان راهنمایی کنن به چه روش میشه کوئری نوشت برای این کار

ROSTAM2
سه شنبه 04 اردیبهشت 1403, 07:24 صبح
سلام دوستان چجوری میتونم کوئری بنویسم که کالا ها رو به شکل زیر جستجو کنم

مثلا جستجو کنم "لولا برنجی" از لیست بره سرچ کنه و برام این فیلد رو نشون بده "لولا آرام بند جک برنجی 7 فنره STD"
یا جستجو کنم "لولا کلیپس" همه اینا رو بیاره

لولا ارام بند با کلیپس موشکی اکس
لولا ارام بند بدون کلیپس
لولا ارام بند بدون کلیپس TURK برنجی
لولا ارام بند بدون کلیپس آما
لولا ارام بند بدون کلیپس اکس
لولا ارام بند بدون کلیپس بازل

155646

به شکل های مختلف جستجو LIKE , CONTAINS و .... میکنم نمیاره

ممنون میشم دوستان راهنمایی کنن به چه روش میشه کوئری نوشت برای این کار

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

mazoolagh
سه شنبه 04 اردیبهشت 1403, 19:49 عصر
سلام و روز خوش
در تکمیل پست جناب ROSTAM گرامی:

1- عبارتهای فارسی رو باید با پیشوند N مشخص کنین:
SELECT ... FROM ... WHERE ... LIKE N'%لولا%'

2- فقط % و _ و [] و [^] در SQL میتونه به عنوان wildcard استفاده بشه،
* برای اکسس هست (فقط در DAO - در ADO همون % هست).

چند نمونه زیر رو ببینین:

SELECT City FROM Cities
WHERE City LIKE N'%شهر%'
که نتایج اون شامل اینهاست (شهر در هر جای نام) : آذرشهر ، بندرماهشهر ، رودبار شهرستان


SELECT City FROM Cities
WHERE City LIKE N'شهر%'
نتایج (شروع نام با شهر) : شهریار ، شهرک ، شهرستانک

SELECT City FROM Cities
WHERE City LIKE N'%شهر'
نتایج (شهر در پایان نام) : خرمشهر ، پیرانشهر ، بوشهر

SELECT City FROM Cities
WHERE City LIKE N'شهر___'
نتایج (شروع نام با شهر و سه کارآکتر پشت سر اون - نه کمتر و نه بیشتر ) : شهرکرد ، شهرپیر ، شهریار

SELECT City FROM Cities
WHERE City LIKE N'شهر[ب-پ]%'
نتایج (شروع نام با شهر و کارآکتر چهارم فقط ب یا پ : شهربابک ، شهرپیر

SELECT City FROM Cities
WHERE City LIKE N'شهر[^ ]%'

نتایج (شروع نام با شهر و کارآکتر چهارم SPACE نباشه : شهرک ، شهربابک (ولی نه "شهر بابک")

MahmoodM30
چهارشنبه 05 اردیبهشت 1403, 09:22 صبح
ممنون از دوستان ولی این ها رو امتحان کردم و نتیجه مورد نظرم رو نگرفتم

تو تصویر زیر ببینید من لولا خالی رو جستجو میکنم نتیجه میشه زیر

155650

حالا من لولا 90 رو سرچ میکنم میخوام برایم فقط بیاره لولا کابینت 90 درجه

155651

MahmoodM30
چهارشنبه 05 اردیبهشت 1403, 09:24 صبح
اگه غیر این باشه جستجوی کالا سخت میشه چون اسم کامل کالا یاد کاربر نمیمونه که قبلا چی ثبت کرده
میخواد مثلا بنویسه لولا 90 سریع بهترین گزینه رو بیاره در غیر این صورت 200 تا کالا براش میاره که توش لولا و 90 هست این باید دوباره تو لیست بالا پایین کنه گزینه مورد نظر رو پیدا کنه ولی اگه گزینه محدود تر به سه یا 2 کالا بشه بهتر میتونه انتخاب کنه

حتی ممکنه لولا اول کلمه نباشه و دومین کلمه باشه

تو یکی دوتا پست هم سرچ کردم یه همچین درخواستی بوده ولی به جایی نرسیده تو انجمن

این مدل جستجو تو مخاطبین موبایل هم هست و تو یسری نرم افزار دیگه هم دیدمبرا همین میخوام اون مدلی جستجو انجام بشه

ROSTAM2
چهارشنبه 05 اردیبهشت 1403, 11:14 صبح
ممنون از دوستان ولی این ها رو امتحان کردم و نتیجه مورد نظرم رو نگرفتم

تو تصویر زیر ببینید من لولا خالی رو جستجو میکنم نتیجه میشه زیر

155650

حالا من لولا 90 رو سرچ میکنم میخوام برایم فقط بیاره لولا کابینت 90 درجه

155651
سلام مجدد
اون کاراکتر جایگزین رو اطراف کلمه ای که می خواهی جستجو کنی استفاده کن.


%لولا%90%

MahmoodM30
چهارشنبه 05 اردیبهشت 1403, 11:32 صبح
ببخشید منظورتون کدوم کاراکتر هست؟

ROSTAM2
چهارشنبه 05 اردیبهشت 1403, 13:31 عصر
ببخشید منظورتون کدوم کاراکتر هست؟

به کاراکترهایی که جای کلمات دیگه رو پر می کنن می گن کاراکتر جایگزین: می تونه % باشه یا * یا ؟

MahmoodM30
پنج شنبه 06 اردیبهشت 1403, 00:10 صبح
ممنون دوست عزیز از راهنمایی که کردید با همین مشکل رو حل کردم

fakhravari
شنبه 08 اردیبهشت 1403, 13:47 عصر
https://learn.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver16





SELECT * FROM WareHouse.INV_Kala p
JOIN (SELECT * FROM STRING_SPLIT (N'کرم چندمنظوره',N' '))x ON p.Kala_FarsiDesc LIKE N'%'+x.value+'%'

mazoolagh
چهارشنبه 12 اردیبهشت 1403, 00:40 صبح
[QUOTE=fakhravari;2468084]

SELECT * FROM WareHouse.INV_Kala p
JOIN (SELECT * FROM STRING_SPLIT (N'کرم چندمنظوره',N' '))x ON p.Kala_FarsiDesc LIKE N'%'+x.value+'%'


سلام و روز خوش
استفاده از STRING_SPLIT هوشمندانه بود،
ولی اینجا چون JOIN کردین همه رکوردهایی که هریک از واژه ها رو داشته باشه برمیگردونه: چه "کرم" چه "چندمنظوره"،
ولی خواسته این هست که همه اینها رو داشته باشه - بدون ترتیب.


فرض کنید در یک دیتا نمونه از مشخصات فیلم ها،
دنبال Title هایی هستیم که هر سه واژه the - gun - man رو داشته باشه - بدون ترتیب:
USE SHOWS;
SELECT IMDBID , Title , Genres
FROM Shows
WHERE TITLE LIKE N'%man%' AND TITLE LIKE N'%the%' AND TITLE LIKE N'%gun%'
155686


حالا اجازه بدین کد شما رو تست کنیم:
USE SHOWS;
SELECT IMDBID , Title , Genres
FROM Shows
JOIN (SELECT * FROM STRING_SPLIT (N'man the gun',N' ')) x
ON Shows.Title LIKE N'%'+x.value+'%'
155687


همینجور که میبینین هر رکوردی رو که فقط یکی از واژه ها رو هم داشته باشه میاره،
و البته اگر بیشتر از یکی باشه تکراری هم میاره - ردیف 2 و 3 رو دقت کنین یا تصویر پایین که هر چون هر 3 مورد بوده 3 رکورد آورده:

155688

mazoolagh
چهارشنبه 12 اردیبهشت 1403, 00:55 صبح
پس لازم هست که نتایج رو گروه بندی کنیم،
و فقط اونهایی رو که هر 3 شرط (در حالت کلی به شماره واژه های درون عبارت ) رو دارا هستن فیلتر کنیم:

USE SHOWS;

declare @Words nvarchar(max)=N'man the gun';
declare @Words_Count int = (SELECT COUNT(value) FROM STRING_SPLIT(@Words,N' '));

WITH All_Words AS (
SELECT value
FROM STRING_SPLIT(@Words,N' ')
)

SELECT IMDBID , Title , Genres
FROM Shows
JOIN All_Words ON Shows.Title LIKE N'%' + value + '%'
GROUP BY IMDBID , Title
HAVING COUNT(All_Words.value)=@Words_Count

mazoolagh
چهارشنبه 12 اردیبهشت 1403, 01:02 صبح
اینجوری هم میشه نوشت:
USE SHOWS;

declare @Words nvarchar(max)=N'man the gun';
declare @Words_Count int = (SELECT COUNT(value) FROM STRING_SPLIT(@Words,N' '));

WITH All_Words AS (
SELECT value
FROM STRING_SPLIT(@Words,N' ')
)

SELECT IMDBID , Title , Genres
FROM Shows
WHERE
(SELECT COUNT(value)
FROM All_Words
WHERE shows.title LIKE N'%' + value + '%'
) = @Words_Count