View Full Version : سوال: سوال درباره select
محمد حسن
یک شنبه 24 آبان 1388, 20:36 عصر
با سلام
می خواهم یه پرس و جو بسازم که از تو یه جدول از بین رکورد هایی با خاصیت مشابه فقط یکی رو برگردونه.
مثلا در یک نظر سنجی اگه یه نفر ده بار نظر داد فقط یکی از اونها رو از بانک در بیارم
(مثل برنامه نود که که اگر چند sms از یک شماره دریافت شد فقط یکبار تو نظر سنجی یا قرعه کشی شرکت داده بشه)
امید وارم منظورم رو گرفته باشید و با distinct اشتباه نگیرید چون من فقط میخوام بر اساس شماره تلفن کل یک رکورد رو برگردونم به طوری که فقط یک رکورد با این شماره در دیتاست باز گشتی باشه
یه کد sql می خوام که پردازش سنگینی نداشته باشه و کاربر رو معطل نکنه
benyaminrahimi
یک شنبه 24 آبان 1388, 22:00 عصر
قبل از قسمت فیلد ها تو select از کلمه کلیدی top 1 استفاده کن
دلفــي
دوشنبه 25 آبان 1388, 08:29 صبح
شما می تونید از گروه بندی استفاده کنید :
Select Phone From Table Group By Phone
با این Select تمام شماره هایی که مشابه باشند به صورت واحد انتخاب میشن . برای نمایش کلیه فیلدهای موجود در رکورد هم می تونید با اعمال یه Total خنثی مانند First یا Last عمل کنید :
Select First(Name) As FirstOfName , Phone From Table Group By Phone
دلفــي
دوشنبه 25 آبان 1388, 08:42 صبح
قبل از قسمت فیلد ها تو select از کلمه کلیدی top 1 استفاده کن
دستور Top i تا اونجایی که من میدونم به تعداد i رکورد رو از ابتدای جدول انتخاب میکنه و کاری نداره که مقادیر فیلدها مشابه هستند یا نه !
برای توضیح بیشتر لطفا یه مثال به صورت کد Sql بزنید .
حسین شهریاری
دوشنبه 25 آبان 1388, 08:54 صبح
سلام
شما باید قبل از نام فیلدی که میخاین غیر تکراری باشه از DISTINCT استفاده کنید
که باعث میشه از بین رکوردهای تکراری براساس آن فیلد فقط یکی در خروجی نمایش داده شود
select DISTINCT field1,field2,field3,...,fieldn from table
موفق باشید
benyaminrahimi
دوشنبه 25 آبان 1388, 09:13 صبح
دستور Top i تا اونجایی که من میدونم به تعداد i رکورد رو از ابتدای جدول انتخاب میکنه و کاری نداره که مقادیر فیلدها مشابه هستند یا نه !
برای توضیح بیشتر لطفا یه مثال به صورت کد Sql بزنید .
منظور من ترکیب top و like بود
group by هم درسته
Hadi_Fayyaz
دوشنبه 25 آبان 1388, 11:56 صبح
با سلام
می خواهم یه پرس و جو بسازم که از تو یه جدول از بین رکورد هایی با خاصیت مشابه فقط یکی رو برگردونه.
مثلا در یک نظر سنجی اگه یه نفر ده بار نظر داد فقط یکی از اونها رو از بانک در بیارم
(مثل برنامه نود که که اگر چند sms از یک شماره دریافت شد فقط یکبار تو نظر سنجی یا قرعه کشی شرکت داده بشه)
امید وارم منظورم رو گرفته باشید و با distinct اشتباه نگیرید چون من فقط میخوام بر اساس شماره تلفن کل یک رکورد رو برگردونم به طوری که فقط یک رکورد با این شماره در دیتاست باز گشتی باشه
یه کد sql می خوام که پردازش سنگینی نداشته باشه و کاربر رو معطل نکنه
با سلام
باكسب اجازه بايد بگم سوال شما يك كمي غير منطقي هست. ببينيد وقتي شما يه تعداد ركورد داري كه مثلا فقط شماره تلفن اونها با هم برابره و ميخوايد دستور Select فقط يكي از اونها رو تو خروجيش نشون بده .. دستور Select از كجا بايد بفهمه كه كدوم ركورد رو بايد انتخاب كنه و نمايش بده دستورهايي هم كه دوستان محبت كردند و توصيه كردند بايد بگم هيچ كدوم كاري كه شما ميخوايد انجام بديد رو دقيقا انجام نميده مگر اينكه تو هر ركوردي يك علامت مشخصه واحدي وجود داشته باشه كه اولويت يا ترتيب اون ركورد رو نشون بده مثل شماره سريال كه ترتيب ثبت ركورد ها رو نشون بده اونوقط شما ميتونيد بگيد از بين ركورد هايي كه شماره تلفن مشابه دارند اوني كه شماره سريال مثلا 1 داره رو در خروجي نشون بده
در غير اينصورت نه دستور Distinct و نه دستور Group By به شما كمك نميكنند
باعرز پوزش
محمد حسن
دوشنبه 25 آبان 1388, 23:01 عصر
با سلام
باكسب اجازه بايد بگم سوال شما يك كمي غير منطقي هست.با سلام
من برام مهم نیست که کدوم از اون رکورد ها ولی با فرض اینکه رکورد با کوچکترین id (فیلد کلیدی) رو برگردونه
شما کوئری اون رو بلدید
خواهشا کمک کنید.
محمد حسن
دوشنبه 25 آبان 1388, 23:05 عصر
سلام
شما باید قبل از نام فیلدی که میخاین غیر تکراری باشه از DISTINCT استفاده کنید
با سلام
وقتی توی access کوئری رو تست میکنم distinct بر روی کل فیلد های ذکر شده اعمال میشه نه بر روی اولین فیلد بعد از اون(کل رکورد را distinct می کنه)
Hadi_Fayyaz
سه شنبه 26 آبان 1388, 01:16 صبح
[quote=محمد حسن;849642]با سلام
من برام مهم نیست که کدوم از اون رکورد ها ولی با فرض اینکه رکورد با کوچکترین id (فیلد کلیدی) رو برگردونه
شما کوئری اون رو بلدید
خواهشا کمک کنید.[/quot
سلام دوست عزيز
حالا سوالتون منطقي تر شد درواقع شما ركوردي رو ميخوايد كه كوچكترين ID رو داشته باشه
حالا فرض كنيم كه جدول شما داراي فيلد هاي زير هست
-ID
-Fname
-Lname
-Phone
-...
-...
وشما ميخوايد يك كوئري بنويسيد كه اگه يك نفر با يك شماره تلفن ولي با ID هاي مختلف در جدول وجود داشت فقط اون ركوردي انتخاب بشه كه كوچكترين ID رو داره اگه سوال شما رو درست فهميده باشم بايد از Query زير استفاده كنيد
Select *
From Table1 as A
Where A.ID in(Select Min(ID)
From Table1 as B
Where A.Phone=B.Phone)
من اين كد رو روي يك جدول فرضي ازمايش كردم و جواب ميده حالا اگه بازم مشكلي بود بگيد تا يك برنامه كامل با جدول مربوطه براتون بفرستم.
اميدوارم مفيد باشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.