একটি কলাম থেকে অনন্য মান নির্বাচন


196

আমার একটি মাইএসকিউএল টেবিল রয়েছে যাতে নিম্নলিখিত ধরণের তথ্য রয়েছে:

    Date            product 
2011-12-12           azd
2011-12-12           yxm
2011-12-10           sdx
2011-12-10           ssdd  

এই টেবিলটি থেকে ডেটা পেতে আমি ব্যবহার করি এমন স্ক্রিপ্টের একটি উদাহরণ:

<?php

$con = mysql_connect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("db", $con);
$sql=mysql_query("SELECT * FROM buy ORDER BY Date");
while($row = mysql_fetch_array($sql))
{

 echo "<li><a href='http://www.website/". $row['Date'].".html'>buy ". date("j, M Y", strtotime($row["Date"]))."</a></li>";

    }
    mysql_close($con);
?> 

এই স্ক্রিপ্টটি টেবিল থেকে প্রতিটি তারিখ প্রদর্শন করে, যেমন

12.dec 2011
12.dec.2011
10.dec.2011
10.dec.2011

আমি কেবল অনন্য তারিখগুলি প্রদর্শন করতে চাই eg

12.dec.2011
10.dec.2011

উত্তর:


362

মাইএসকিউএলে DISTINCT অপারেটরটি ব্যবহার করুন :

SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;

18
দুর্ভাগ্যজনক সমস্যাটি DISTINCTহ'ল এটি কেবল সেই এক ক্ষেত্রটি ফেরত দেয় ... সুতরাং আপনি যদি পুরো রেকর্ডটি চান, তবে DISTINCT অর্থহীন (যদি না এটি কোনও আইডি ক্ষেত্র না হয় এবং আপনি সেই তালিকায় যেখানে আইডি করেন সেখানে একটি দ্বিতীয় কোয়েরি করতে পারেন)। সুসংবাদ, যদিও, জিনের ফলস্বরূপ যদি আপনার একাধিক সদৃশ ফলাফল থাকে তবে আপনি একটি গ্রুপের মাধ্যমে করতে পারেন এবং পুরো ফলাফলগুলি ফিল্টার করে নিতে পারেন।
চাদউইক মেয়ার

1
চাদউইক মায়ার এটি সঠিক নয়! আপনি একাধিক ক্ষেত্র চয়ন করতে পারেন, তবে আপনাকে সেগুলি গ্রুপ করতে হবে। আপনি এটির মতো এটি তৈরি করতে পারেন: আপনার নাম হিসাবে আপনার নাম হিসাবে আইডি নির্বাচন করুন, নাম অনুসারে অর্ডার অনুসারে সারণী থেকে গ্রাহক করুন। আপনি অবাক হবেন!
লুসিয়ান মিনা

44

ব্যবহার

SELECT DISTINCT Date FROM buy ORDER BY Date

সুতরাং মাইএসকিউএল সদৃশগুলি সরিয়ে দেয়

বিটিডাব্লু: SELECTআপনি যখন মাইএসকিউএল থেকে একটি বড় ফলাফল পাচ্ছেন তখন পিএইচপি-তে কম সংস্থান ব্যবহার করে সুস্পষ্ট কলামের নাম ব্যবহার করে


1
আপনি কি "সুস্পষ্ট কলামের নাম ব্যবহার করে" ব্যাখ্যা করতে পারেন? কোন উপায়ে কম সংস্থান গ্রহণ করা হয় এবং কোনটি বেশি? উদাহরণস্বরূপ একটু দয়া করে?
নাবিল খান

সাধারণ ব্যবহারের ক্ষেত্রে হ'ল পিএইচপি-তে ডাটাবেস থেকে ডেটা "বহুমাত্রিক অ্যারে" প্রবাহিত করা; সুতরাং আপনার পিএইচপি প্রক্রিয়াটি আপনার প্রয়োজন নাও হতে পারে এমন ডেটা সহ কেবল মেমরির অপচয় করে। কেবলমাত্র কিছু ডেটাসেটের জন্য এটি নগণ্য, তবে কয়েক হাজার সারি পরিচালনা করার পরে এটি কোনও পার্থক্য আনতে পারে।
রাবুদে

2
@ নাবিলখান সलेक्ट * ব্যবহারের পরিবর্তে ... নির্বাচন করুন কলাম 1, কলাম 2 ব্যবহার করুন ... যদি না আপনি সত্যিই সমস্ত কলামের প্রয়োজন হয়।
LPChip

টেবিলের নাম ব্যবহার করুন?
নাবিল খান

1
আপনি টেবিলগুলিতে যোগ দিলে @ নবেল খান আপনার কেবল টেবিলের নাম কলাম নাম প্রয়োজন।
LPChip

26

মান পেতে এই ক্যোয়ারীটি ব্যবহার করুন

SELECT * FROM `buy` group by date order by date DESC

3
আমি দেখেছি যে এটি সহায়ক ছিল না। বলুন আপনার কাছে 5 টি আইটেম রয়েছে, সমস্ত একই dateএবং ভিন্ন description। উপরের কমান্ডটি ব্যবহার করে স্বতন্ত্র গুলি প্রদর্শিত হবেdate তবে কেবল descriptionপ্রথম আইটেমটি পাওয়া যাবে।
ওয়ানব্রি

@ অ্যানব্রি - সেক্ষেত্রে আপনি করতে পারেন GROUP BY date,description
টুলমেকারস্টেভ

20

বাকিগুলি প্রায় সঠিক, তারিখ ডিইএসসি দ্বারা আদেশ করা উচিত ব্যতীত almost

SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;

6

DISTINCTঅনন্য মান পেতে সর্বদা একটি সঠিক পছন্দ। এছাড়াও আপনি এটি ব্যবহার না করে বিকল্পভাবে এটি করতে পারেন। এটাই GROUP BY। যা কোয়েরির শেষে কেবল কলামের নাম যুক্ত করেছে।

SELECT * FROM buy GROUP BY date,description

4

অন্য DISTINCTউত্তর, তবে একাধিক মান সহ:

SELECT DISTINCT `field1`, `field2`, `field3` FROM `some_table`  WHERE `some_field` > 5000 ORDER BY `some_field`

2

আপনি যদি JSON হিসাবে তারিখ অনুসারে পণ্যের বিবরণ আউটপুট করতে চান তবে এই জাতীয় কিছু ব্যবহার করুন।

SELECT `date`,
CONCAT('{',GROUP_CONCAT('{\"id\": \"',`product_id`,'\",\"name\": \"',`product_name`,'\"}'),'}') as `productsJSON`
FROM `buy` group by `date` 
order by `date` DESC

 product_id product_name     date  
|    1     |     azd    | 2011-12-12 |
|    2     |     xyz    | 2011-12-12 |
|    3     |     ase    | 2011-12-11 |
|    4     |     azwed  | 2011-12-11 |
|    5     |     wed    | 2011-12-10 |
|    6     |     cvg    | 2011-12-10 |
|    7     |     cvig   | 2011-12-09 |

RESULT
       date                                productsJSON
2011-12-12T00:00:00Z    {{"id": "1","name": "azd"},{"id": "2","name": "xyz"}}
2011-12-11T00:00:00Z    {{"id": "3","name": "ase"},{"id": "4","name": "azwed"}}
2011-12-10T00:00:00Z    {{"id": "5","name": "wed"},{"id": "6","name": "cvg"}}
2011-12-09T00:00:00Z    {{"id": "7","name": "cvig"}}

এসকিউএল ফিডল এ চেষ্টা করে দেখুন



0

আপনার যা প্রয়োজন তা নির্ভর করে।

এই ক্ষেত্রে আমি প্রস্তাব:

SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;

কারণ এখানে কয়েকটি ক্ষেত্র রয়েছে এবং এর সম্পাদনের সময় DISTINCTকার্যকর হওয়ার চেয়ে কম হয় GROUP BY

অন্যান্য ক্ষেত্রে, উদাহরণস্বরূপ যেখানে অনেক ক্ষেত্র রয়েছে, আমি পছন্দ করি:

SELECT * FROM buy GROUP BY date ORDER BY date DESC;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.