نمایش نتایج 1 تا 10 از 10

نام تاپیک: جستجوی سریع

  1. #1

    جستجوی سریع

    سلام دوستان من در سطح مبتدی دستورات اس کیو ال رو می دونم
    می خواستم ببینم واسه سرچ های سریع
    مثلا جدولی که 5 فیلد دار که به ترتیب
    ID,FirstName,LastName,Phone,Adress
    باشه
    اگه بخوایم جستجویی در این جدول داشته باشیم به صورتی که اگر کاربر هر کدوم از فیلد هارو وارد کرد به رکورد مورد نظر نزدیک و نزدیک تر بشه اگه مقداری از داده ی هر فیلد رو هم وارد کرد به داده ی مورد نظر نزدیک بشه !!
    می خواستم ببینم که باید برای جستجوی چنین حالتی باید store proc نوشت!!?

    من در جاوا چنین کدی رو نوشتم

    sql = "select * from Person where";
    sql += " FirstName like '%" + isNullString(str[0].trim()) + "%' or LastName like '%" + isNullString(str[1].trim()) + "%' or Phone like '%" + isNullString(str[2].trim()) + "%' or Adress like '%" + isNullString(str[3].trim()) + "%'";
    sql += " or FirstName like '%" + isNullString(str[1].trim()) + "%' or LastName like '%" + isNullString(str[2].trim()) + "%' or Phone like '%" + isNullString(str[3].trim()) + "%' or Adress like '%" + isNullString(str[0].trim()) + "%'";
    sql += " or FirstName like '%" + isNullString(str[2].trim()) + "%' or LastName like '%" + isNullString(str[3].trim()) + "%' or Phone like '%" + isNullString(str[0].trim()) + "%' or Adress like '%" + isNullString(str[1].trim()) + "%'";
    sql += " or FirstName like '%" + isNullString(str[3].trim()) + "%' or LastName like '%" + isNullString(str[0].trim()) + "%' or Phone like '%" + isNullString(str[1].trim()) + "%' or Adress like '%" + isNullString(str[2].trim()) + "%'";


    در این کد با نوشتن مقادیر زیاد نمی تونم به رکورد مورد نظر نزدیک بشم
    اگر کسی می دونه کمک کنه لطفا من طریقه نوشتن store proc رو نمی دونم

  2. #2

    نقل قول: جستجوی سریع

    شرط های Where را میتونید داینامیک تولید کنید. یعنی مثلا کاربر برای دو پارامتر (ستون) مقداری تهیه کرد شما اون دو شرط را با AND با هم ترکیب میکنید تا جواب نزدیک تری بدست بیاد. یعنی سطرهای بیشتری فیلتر بشن. و جواب دقیق تر بدست بیاد.

    به این مثال توجه کنید:

    declare @sql varchar(500) =''

    set @sql = 'select * from table where 1=1 '

    if @param1 is not null
    set @sql += 'and id = ' + @param

    if @param2 is not null
    set @sql += 'and phone = ''' + @param2 + ''' '

    ...



    بازم جستجو کنید. شالوده کار رو من بهتون معرفی کردم راجب dynamic search مطلب فراوان.
    وبلاگ من (Advanced SQL Querying)

  3. #3

    نقل قول: جستجوی سریع

    سلام ممنون از کمکتون من اصلا با storeproc ها کار نکردم اصلا نمی دونم باید چطوری ایجادشون کنم
    شما که این راهنمایی رو کردید و گفتید که باید در مورد dynamic search بگردم من یک سرچی هم در گوگل زدم چنین کدی رو دیدم که در واقع یه جورایی همینیه که شما فرمودید ولی من اصلا نمی دونم چطوری باید ازش اسفاده کنم یا متغیر هاش رو چطوری ست کنم اصلا نمی دونم خواهشم می کنم راهنمایم کنید چطوری باید این storeproc رو رو جدولم که فیلداش رو بالا گفته بودم ست کنم
    و ایجادش کنم ممنون



    CREATE PROCEDURE search_orders_1
    @orderid int = NULL,
    @fromdate datetime = NULL, -- 3
    @todate datetime = NULL, -- 4
    @minprice money = NULL, -- 5
    @maxprice money = NULL, -- 6
    @custid nchar(5) = NULL, -- 7
    @custname nvarchar(40) = NULL, -- 8
    @city nvarchar(15) = NULL, -- 9
    @region nvarchar(15) = NULL, -- 10
    @country nvarchar(15) = NULL, -- 11
    @prodid int = NULL, -- 12
    @prodname nvarchar(40) = NULL, -- 13
    @debug bit = 0 AS -- 14
    -- 15
    DECLARE @sql nvarchar(4000), -- 16
    @paramlist nvarchar(4000) -- 17
    -- 18
    SELECT @sql = -- 19
    'SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity, -- 20
    c.CustomerID, c.CompanyName, c.Address, c.City, -- 21
    c.Region, c.PostalCode, c.Country, c.Phone, -- 22
    p.ProductID, p.ProductName, p.UnitsInStock, -- 23
    p.UnitsOnOrder -- 24
    FROM dbo.Orders o -- 25
    JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID -- 26
    JOIN dbo.Customers c ON o.CustomerID = c.CustomerID -- 27
    JOIN dbo.Products p ON p.ProductID = od.ProductID -- 28
    WHERE 1 = 1' -- 29
    -- 30
    IF @orderid IS NOT NULL -- 31
    SELECT @sql = @sql + ' AND o.OrderID = @xorderid' + -- 32
    ' AND od.OrderID = @xorderid' -- 33
    -- 34
    IF @fromdate IS NOT NULL -- 35
    SELECT @sql = @sql + ' AND o.OrderDate >= @xfromdate' -- 36
    -- 37
    IF @todate IS NOT NULL -- 38
    SELECT @sql = @sql + ' AND o.OrderDate <= @xtodate' -- 39
    -- 40
    IF @minprice IS NOT NULL -- 41
    SELECT @sql = @sql + ' AND od.UnitPrice >= @xminprice' -- 42
    -- 43
    IF @maxprice IS NOT NULL -- 44
    SELECT @sql = @sql + ' AND od.UnitPrice <= @xmaxprice' -- 45
    -- 46
    IF @custid IS NOT NULL -- 47
    SELECT @sql = @sql + ' AND o.CustomerID = @xcustid' + -- 48
    ' AND c.CustomerID = @xcustid' -- 49
    -- 50
    IF @custname IS NOT NULL -- 51
    SELECT @sql = @sql + ' AND c.CompanyName LIKE @xcustname + ''%''' -- 52
    -- 53
    IF @city IS NOT NULL -- 54
    SELECT @sql = @sql + ' AND c.City = @xcity' -- 55
    -- 56
    IF @region IS NOT NULL -- 57
    SELECT @sql = @sql + ' AND c.Region = @xregion' -- 58
    -- 59
    IF @country IS NOT NULL -- 60
    SELECT @sql = @sql + ' AND c.Country = @xcountry' -- 61
    -- 62
    IF @prodid IS NOT NULL -- 63
    SELECT @sql = @sql + ' AND od.ProductID = @xprodid' + -- 64
    ' AND p.ProductID = @xprodid' -- 65
    -- 66
    IF @prodname IS NOT NULL -- 67
    SELECT @sql = @sql + ' AND p.ProductName LIKE @xprodname + ''%''' -- 68
    -- 69
    SELECT @sql = @sql + ' ORDER BY o.OrderID' -- 70
    -- 71
    IF @debug = 1 -- 72
    PRINT @sql -- 73
    -- 74
    SELECT @paramlist = '@xorderid int, -- 75
    @xfromdate datetime, -- 76
    @xtodate datetime, -- 77
    @xminprice money, -- 78
    @xmaxprice money, -- 79
    @xcustid nchar(5), -- 80
    @xcustname nvarchar(40), -- 81
    @xcity nvarchar(15), -- 82
    @xregion nvarchar(15), -- 83
    @xcountry nvarchar(15), -- 84
    @xprodid int, -- 85
    @xprodname nvarchar(40)' -- 86
    -- 87
    EXEC sp_executesql @sql, @paramlist, -- 88
    @orderid, @fromdate, @todate, @minprice, -- 89
    @maxprice, @custid, @custname, @city, @region, -- 90
    @country, @prodid, @prodname



  4. #4

    نقل قول: جستجوی سریع

    این کد رو تو جاوا پیاده کردم اما تا چقدر باید این شرط هارو ادامه بدم آیا درسته که من این کار رو تو جاوا کنم یا بهتر اینه که باید storeproc براش ایجاد کنم؟؟؟؟


    public ArrayList<Person> test(String s){
    ArrayList<Person> persons = new ArrayList<Person>();
    String sql = "select * from Person where";
    String[] str = s.split(" ");
    switch(str.length){
    case 1:
    sql += " ID = '"+isNullString(str[0].trim())+"' or FirstName like '%" + isNullString(str[0].trim()) + "%' or LastName like '%" + isNullString(str[0].trim()) + "%' or Phone like '%" + isNullString(str[0].trim()) + "%' or Adress like '%" + isNullString(str[0].trim()) + "%'";
    da.Connect();
    persons = da.Selectll(sql);
    da.Disconnect();
    break;
    case 2:
    sql += " FirstName like '%" + isNullString(str[0].trim()) + "%' And LastName like '%" + isNullString(str[1].trim()) + "%'"
    + " or Phone like '%"+ isNullString(str[0].trim()) + "%' And Adress like '%" + isNullString(str[1].trim()) + "%'"
    + " or Phone like '%" + isNullString(str[1].trim()) + "%' And Adress like '%" + isNullString(str[0].trim()) + "%'"
    + " or FirstName like '%" + isNullString(str[1].trim()) + "%' And LastName like '%" + isNullString(str[0].trim()) + "%'"
    + " or FirstName like '%" + isNullString(str[0].trim()) + "%' And Adress like '%" + isNullString(str[1].trim()) + "%'"
    + " or Adress like '%" + isNullString(str[0].trim()) + "%' And FirstName like '%" + isNullString(str[1].trim()) + "%'"
    + " or LastName like '%" + isNullString(str[0].trim()) + "%' And Phone like '%" + isNullString(str[1].trim()) + "%'"
    + " or Phone like '%" + isNullString(str[0].trim()) + "%' And LastName like '%" + isNullString(str[1].trim()) + "%'";
    da.Connect();
    persons = da.Selectll(sql);
    da.Disconnect();
    break;
    case 3:
    sql += " FirstName like '%" + isNullString(str[0].trim()) + "%' and LastName like '%" + isNullString(str[1].trim()) + "%' And Phone like '%" + isNullString(str[2].trim()) + "%'";
    da.Connect();
    persons = da.Selectll(sql);
    da.Disconnect();
    break;
    case 4:
    sql += " FirstName like '%" + isNullString(str[0].trim()) + "%' And LastName like '%" + isNullString(str[1].trim()) + "%' And Phone like '%" + isNullString(str[2].trim()) + "%' And Adress like '%" + isNullString(str[3].trim()) + "%'";
    da.Connect();
    persons = da.Selectll(sql);
    da.Disconnect();
    break;
    }
    return persons;
    }

  5. #5

    نقل قول: جستجوی سریع

    اینجوری تنظیمش کردم و storeproc رو ایجاد کردم اما چطوری باید ازش استفاده کنم؟؟


    CREATE PROCEDURE search_orders_1
    @ID nvarchar(20) = NULL,
    @FirstName nvarchar(50) = NULL,
    @LastName nvarchar(50) = NULL,
    @Phone nvarchar(15) = NULL,
    @Adress nvarchar(MAX) = NULL,
    @debug bit = 0 AS


    DECLARE @sql nvarchar(MAX),
    @paramlist nvarchar(MAX)

    SELECT @sql =
    'SELECT ID, FirstName, LastName, Phone, Adress
    FROM Person
    WHERE 1 = 1'

    IF @ID IS NOT NULL
    SELECT @sql = @sql + ' AND ID = @xID'

    IF @FirstName IS NOT NULL
    SELECT @sql = @sql + ' AND FirstName >= @xFirstName'

    IF @LastName IS NOT NULL
    SELECT @sql = @sql + ' AND LastName <= @xLastName'

    IF @Phone IS NOT NULL
    SELECT @sql = @sql + ' AND Phone >= @xPhone'

    IF @Adress IS NOT NULL
    SELECT @sql = @sql + ' AND Adress <= @xAdress'

    SELECT @sql = @sql + ' ORDER BY ID'

    IF @debug = 1
    PRINT @sql

    SELECT @paramlist = '@xID nvarchar(20),
    @xFirstName nvarchar(50),
    @xLastName nvarchar(50),
    @xPhone nvarchar(15) ,
    @xAdress nvarchar(MAX)'

    EXEC sp_executesql @sql, @paramlist,
    @ID, @FirstName, @LastName, @Phone,@Adress



  6. #6

    نقل قول: جستجوی سریع

    با دستور EXE پروسیجر رو اجرا میکنید و هر پارامتری که مد نظرتون بود را مقدار دهی میکنید.
    مثلا میخواهید پروسیجر با مقدار دهی به پارامتر ID اجرا بشه:
    EXEC search_orders_1  @ID = 120


    ضمنا همون جایی که این پروسیجر را قرار داده بود نمونه ای از دستورات اجرا با پارامترهای مختلف را ارائه نداده بود؟
    وبلاگ من (Advanced SQL Querying)

  7. #7

    نقل قول: جستجوی سریع

    بله درسته ممنون واقعا
    این لینکیه که از اونجا گرفتمش
    http://www.sommarskog.se/dyn-search-2005.html#dynintro
    فقط من وقتی FirstName رو مقدار می دم خیلی از رکورد های دیگه رو هم میاره مثل 2 یا 3 4 تا اضافه تر چرا اینطوریه؟؟

  8. #8

    نقل قول: جستجوی سریع

    به کد مربوط به پروسیجری که نوشتین دقت کنید از عملگر بزرگتر مساوی برای firstName استفاده شده. تبدیلش کنید به عملگر = یا از LIKE استفاده کنید.
    و همین کار را شرطهای دیگه هم انجام بدین
    وبلاگ من (Advanced SQL Querying)

  9. #9

    نقل قول: جستجوی سریع

    فکر می کنم به خاطر علامت های => و ... مساوی گذاشتم درست شد فقط چرا اینطوری شرط گذاشته بود چه کمکی می کنه بزرگتر کوچکتری ؟؟!!

  10. #10

    نقل قول: جستجوی سریع

    درسته ممنون
    فقط چطوری می تونم فیلد رو در داخل '%%' قرار بدم که هرچی که وارد شد در داخل مقدار اون فیلد بود رو برگردونه؟

تاپیک های مشابه

  1. جستجوی سریع روی ستونهای متنی
    نوشته شده توسط A.Farzin در بخش SQL Server
    پاسخ: 1
    آخرین پست: شنبه 25 فروردین 1386, 21:42 عصر
  2. جستجوی سریع
    نوشته شده توسط رهنورد2 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: دوشنبه 03 مهر 1385, 07:55 صبح
  3. تقاضای راهنمایی جستجوی سریع در Vb
    نوشته شده توسط jafakar78 در بخش برنامه نویسی در 6 VB
    پاسخ: 9
    آخرین پست: شنبه 09 اردیبهشت 1385, 13:44 عصر
  4. پاسخ: 34
    آخرین پست: یک شنبه 12 تیر 1384, 12:02 عصر
  5. جستجوی سریع و پیدا کردن max مقدار در کمترین زمان ممکن
    نوشته شده توسط کتایون در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: سه شنبه 07 بهمن 1382, 19:34 عصر

قوانین ایجاد تاپیک در تالار

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