mysql - আমি কি একাধিক মাইএসকিউএল সারি এক ক্ষেত্রে সংহত করতে পারি?




concat group-concat (7)

MySQL ব্যবহার MySQL , আমি কিছু করতে পারি:

SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

আমার আউটপুট:

shopping
fishing
coding

কিন্তু পরিবর্তে আমি শুধু 1 সারি, 1 কোল চাই:

প্রত্যাশিত আউটপুট:

shopping, fishing, coding

কারণ আমি একাধিক টেবিল থেকে একাধিক মান নির্বাচন করছি, এবং সব যোগদান পরে আমি অনেক চাই আমি চেয়ে বেশি সারি আছে।

আমি MySQL ডক-এ একটি ফাংশন সন্ধান করেছি এবং এটি CONCAT বা CONCAT_WS ফাংশনগুলির মত ফলাফল সেট গ্রহণ করে না, তাই কেউ এখানে কীভাবে এটি করতে জানে?


একাধিক, পৃথক সারি concatenate বিকল্প সিনট্যাক্স

সতর্কতা: এই পোস্টটি আপনাকে ক্ষুধার্ত করবে।

প্রদত্ত:

আমি নিজেকে একাধিক, একাধিক সারি নির্বাচন করতে চেয়েছিলাম-একটি গ্রুপের পরিবর্তে-এবং একটি নির্দিষ্ট ক্ষেত্রের সাথে সংযুক্ত করা।

ধরুন আপনার পণ্য আইডির একটি টেবিল এবং তাদের নাম এবং মূল্য রয়েছে:

+------------+--------------------+-------+
| product_id | name               | price |
+------------+--------------------+-------+
|         13 | Double Double      |     5 |
|         14 | Neapolitan Shake   |     2 |
|         15 | Animal Style Fries |     3 |
|         16 | Root Beer          |     2 |
|         17 | Lame T-Shirt       |    15 |
+------------+--------------------+-------+

তারপরে আপনার কিছু ফ্যান্সি-স্কমান্সি AJAX রয়েছে যা চেকবক্সগুলির মতো এই কুকুরগুলিকে তালিকাভুক্ত করে।

আপনার ক্ষুধার্ত-হিপ্পো ব্যবহারকারী 13, 15, 16 নির্বাচন করে। আজ তার জন্য কোন ডেজার্ট ...

খুঁজুন:

বিশুদ্ধ MySQL সঙ্গে, এক লাইন আপনার ব্যবহারকারীর ক্রম সংক্ষিপ্ত করার একটি উপায়।

সমাধান:

IN clause সহ GROUP_CONCAT ব্যবহার করুন:

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);

কোন আউটপুট:

+------------------------------------------------+
| order_summary                                  |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+

বোনাস সমাধান:

আপনি যদি মোট SUM() চান তবে SUM() টস করুন SUM() :

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16);
+------------------------------------------------+-------+
| order_summary                                  | total |
+------------------------------------------------+-------+
| Double Double + Animal Style Fries + Root Beer |    10 |
+------------------------------------------------+-------+

পিএসঃ যদি আপনার কাছে ইন-এন-আউট না থাকে তবে ক্ষমাপ্রার্থী ...


আপনি GROUP_CONCAT ব্যবহার করতে পারেন:

SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

লুডভিগ তার মন্তব্যে বলেছেন , আপনি সদৃশ এড়াতে DISTINCT অপারেটর যোগ করতে পারেন:

SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies 
GROUP BY person_id;

জন তাদের মন্তব্যে বর্ণিত হিসাবে , আপনি ORDER BY ব্যবহার করে এটি আনলড করার আগে মানগুলিকে সাজান করতে পারেন:

SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

ডাগ তার মন্তব্যে বলেছেন , ফলাফলের উপর 1024 বিট সীমা রয়েছে। এটি সমাধানের জন্য, আপনার প্রশ্নের আগে এই প্রশ্নটি চালান:

SET group_concat_max_len = 2048;

অবশ্যই, আপনি আপনার প্রয়োজন অনুযায়ী 2048 পরিবর্তন করতে পারেন। হিসাব এবং মূল্য বরাদ্দ করতে:

SET group_concat_max_len = CAST(
    (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
    FROM peoples_hobbies 
    GROUP BY person_id)
    AS UNSIGNED
);

আমাদের MySQL এ কলাম সংহত করার দুটি উপায় আছে

select concat(hobbies) as `Hobbies` from people_hobbies where 1

অথবা

select group_concat(hobbies) as `Hobbies` from people_hobbies where 1

আমার কাছে আরও জটিল প্রশ্ন ছিল এবং এটি পাওয়া যায় যে আমাকে এটিতে কাজ করার জন্য বাইরের প্রশ্নের মধ্যে GROUP_CONCAT ব্যবহার করতে হয়েছিল:

মূল প্রশ্ন:

SELECT DISTINCT userID 
FROM event GROUP BY userID 
HAVING count(distinct(cohort))=2);

imploded:

SELECT GROUP_CONCAT(sub.userID SEPARATOR ', ') 
FROM (SELECT DISTINCT userID FROM event 
GROUP BY userID HAVING count(distinct(cohort))=2) as sub;

এই কেউ সাহায্য করতে পারে আশা করি।


একটি GROUP সমষ্টিগত ফাংশন আছে, GROUP_CONCAT


এটা চেষ্টা কর:

DECLARE @Hobbies NVARCHAR(200) = ' '

SELECT @Hobbies = @Hobbies + hobbies + ',' FROM peoples_hobbies WHERE person_id = 5;

GROUP_CONCAT এ আপনার নজর রাখুন যদি আপনার MySQL সংস্করণ (4.1) এটি সমর্থন করে। আরো বিস্তারিত জানার জন্য GROUP_CONCAT দেখুন।

এটা ভালো কিছু দেখতে হবে:

  SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') 
  FROM peoples_hobbies 
  WHERE person_id = 5 
  GROUP BY 'all';







group-concat