এক ক্ষেত্র থেকে দুটি ক্ষেত্রে বিভক্ত মান


125

আমি একটি টেবিল ক্ষেত্র পেয়েছি membernameযা ব্যবহারকারীর নাম এবং শেষ নাম উভয়ই রয়েছে। এটা সম্ভব 2 ক্ষেত্রগুলির মধ্যে ঐ বিভক্ত করতে হয় memberfirst, memberlast?

সমস্ত রেকর্ডের এই ফর্ম্যাটটি "ফার্স্টনেম লাস্টনেম" (কোনও উদ্ধৃতি এবং এর মধ্যে একটি স্থান ছাড়া) রয়েছে।


6
"সমস্ত রেকর্ডের এই ফর্ম্যাটটি" ফার্স্টনেম লাস্টনেম "(উদ্ধৃতি এবং এর মধ্যে একটি স্থান ছাড়া) রয়েছে" ... অলৌকিকভাবে ... দয়া করে, দয়া করে , ডাটাবেসের সিদ্ধান্ত নেওয়ার সময় আমার মতো লোকদের সম্পর্কে ভুলবেন না। খুব প্রায়ই আমি ওয়েবসাইট পেয়েছি আমার শেষ
নামটিতে

@ স্টিজেডেভিট আপনি সাধারণভাবে ঠিক বলেছেন, তবে মনে হয় এই ডাটাবেসটিতে আপনার নাম অন্তত অন্তত এর সরকারী আকারে নেই। আমার দেশে ছদ্ম নামগুলি প্রথমে লেখা হয়, সুতরাং আমি এই ডেটা সারণীতেও "বৈষম্যমূলক" হব। কেবল এটি দেখুন ->
ডেভিড হরভ্থ

উত্তর:


226

দুর্ভাগ্যক্রমে মাইএসকিউএল একটি বিভক্ত স্ট্রিং ফাংশন বৈশিষ্ট্যযুক্ত না। তবে আপনি এটির জন্য একটি ব্যবহারকারী সংজ্ঞায়িত ফাংশন তৈরি করতে পারেন , যেমন নীচের নিবন্ধে বর্ণিত একটি:

যে ফাংশন সহ:

DELIMITER $$

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255) DETERMINISTIC
BEGIN 
    RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');
END$$

DELIMITER ;

আপনি নিম্নলিখিত হিসাবে আপনার কোয়েরি তৈরি করতে সক্ষম হবে:

SELECT SPLIT_STR(membername, ' ', 1) as memberfirst,
       SPLIT_STR(membername, ' ', 2) as memberlast
FROM   users;

আপনি যদি কোনও ব্যবহারকারী সংজ্ঞায়িত ফাংশন ব্যবহার না করা পছন্দ করেন এবং আপনি কোয়েরিকে কিছুটা ভার্বোস বলে মনে করেন না, আপনি নিম্নলিখিতগুলিও করতে পারেন:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(membername, ' ', 1), ' ', -1) as memberfirst,
       SUBSTRING_INDEX(SUBSTRING_INDEX(membername, ' ', 2), ' ', -1) as memberlast
FROM   users;

এই সমস্যার জন্য দুর্দান্ত সমাধান!
বার্গক্যাম্প

তবুও আপনি বিভক্ত অপারেশন থেকে "মানগুলির অ্যারে" হিসাবে IN ব্যবহার করতে পারবেন না?
মিগুয়েল

3
আপনার LENGTHমাল্টিবাইট ব্যবহার নিরাপদ? "LENGTH (str): স্ট্রিংয়ের স্ট্রিংয়ের দৈর্ঘ্য, বাইটগুলিতে পরিমাপ করে দেয় A একটি মাল্টিবাইট অক্ষর একাধিক বাইট হিসাবে গণনা করে This 5. "
এর্ক

@Erk উল্লিখিত হিসাবে মাল্টিবাইট / utf8 টি অক্ষরের সাথে ডিল করার সময় এটি সঠিকভাবে কাজ করবে না। দুটি SUBSTRING_INDEX বিবৃতি সহ কেবল সরল সমাধান utf8 / মাল্টিবাইটের সাথে কাজ করে
মাইকেল মাইকেল

LENGTH (), LOCATE () বা কোনও কিছু যা অবস্থানের গণনায় নির্ভর করে মাল্টিবাইট অক্ষর দ্বারা ব্যর্থ হবে।
মাইকেল 22

68

বৈকল্পিক নির্বাচন করুন (কোনও ব্যবহারকারী নির্ধারিত ফাংশন তৈরি করে না):

SELECT IF(
        LOCATE(' ', `membername`) > 0,
        SUBSTRING(`membername`, 1, LOCATE(' ', `membername`) - 1),
        `membername`
    ) AS memberfirst,
    IF(
        LOCATE(' ', `membername`) > 0,
        SUBSTRING(`membername`, LOCATE(' ', `membername`) + 1),
        NULL
    ) AS memberlast
FROM `user`;

এই পদ্ধতির এছাড়াও যত্ন নেয়:

  • কোনও স্থান ছাড়াই সদস্যের নাম মান : এটি পুরো স্ট্রিংটিকে মেম্বার্স্টিস্টে যুক্ত করবে এবং মেম্বার্লাস্টকে ন্যূনএলএল সেট করবে।
  • সদস্যের নাম মান যা একাধিক স্পেস রয়েছে : এটি মেমরিস্টেস্টে প্রথম স্থানের আগে এবং বাকী অংশ (অতিরিক্ত স্পেস সহ) সদস্যপদে যোগ করবে।

আপডেট সংস্করণটি হবে:

UPDATE `user` SET
    `memberfirst` = IF(
        LOCATE(' ', `membername`) > 0,
        SUBSTRING(`membername`, 1, LOCATE(' ', `membername`) - 1),
        `membername`
    ),
    `memberlast` = IF(
        LOCATE(' ', `membername`) > 0,
        SUBSTRING(`membername`, LOCATE(' ', `membername`) + 1),
        NULL
    );

সর্বশেষ নামের কীভাবে কেবল শেষ শব্দটি কেটে ফেলা যায় এবং প্রথম নামের জন্য সমস্ত অ-শেষ শব্দগুলি কীভাবে কেটে ফেলা যায় তা দেখতেও দরকারী হ'ল উদাহরণস্বরূপ: মেরি এ স্মিথ যা আমি পুরানো ডিবি টেবিলের সাথে এর সাথে সম্পর্কিত ফিক্স। আমি এটি খুঁজে বের করতে এবং ফলাফল পোস্ট করতে পারি কিনা তা আমি দেখতে পাচ্ছি, যদি না হয়, আপনি যদি সেই বিকল্পটি পোস্ট করতে পারেন তবে এটি আপনার উত্তর সম্পূর্ণ করে দেবে।
Lizardx

সদস্য নামটি ভারচর হওয়ায় আমরা এটি কীভাবে পূর্ণসংখ্যায় ফেলে দিতে পারি .. আমি সরাসরি castালাই () ব্যবহার করলে এটি কাজ করবে?
অনন্তকালীন

আপনি স্যার একটি পদক প্রাপ্য।
rpajaziti

23

দেখে মনে হয় যে বিদ্যমান প্রতিক্রিয়াগুলি নির্দিষ্ট জটিলতার চেয়ে বেশি জটিল বা নির্দিষ্ট প্রশ্নের কঠোর উত্তর নয়।

আমি মনে করি, সহজ উত্তরটি নীচের ক্যোয়ারী:

SELECT
    SUBSTRING_INDEX(`membername`, ' ', 1) AS `memberfirst`,
    SUBSTRING_INDEX(`membername`, ' ', -1) AS `memberlast`
;

আমি মনে করি এই বিশেষ পরিস্থিতিতে দুটি-শব্দের চেয়ে বেশি নাম নিয়ে কাজ করার দরকার নেই। আপনি যদি এটি সঠিকভাবে করতে চান তবে কিছু ক্ষেত্রে বিভাজন খুব শক্ত বা এমনকি অসম্ভব হতে পারে:

  • জোহান সেবাস্তিয়ান বাচ
  • জোহান ওল্ফগ্যাং ভন গোয়েথ
  • এডগার অ্যালান পো
  • জ্যাকব লুডভিগ ফেলিক্স মেন্ডেলসোহন-বার্থল্ডি
  • পেটিফি স্যান্ডর
  • 澤黒

সঠিকভাবে ডিজাইন করা ডাটাবেসে, মানুষের নামগুলি উভয় অংশে এবং পুরোপুরি সংরক্ষণ করা উচিত। এটি অবশ্যই সর্বদা সম্ভব নয়।


20

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

আপনি যদি কখনও নিজেকে কোনও স্তরের কোনও অংশে প্রক্রিয়াজাত করতে দেখেন তবে আপনার ডিবি ডিজাইনটি ত্রুটিযুক্ত। এটি কোনও হোম অ্যাড্রেস বই বা রেসিপি অ্যাপ্লিকেশন বা অগণিত অন্যান্য ছোট ছোট ডাটাবেসের কোনওটিতে ঠিকঠাক কাজ করতে পারে তবে এটি "রিয়েল" সিস্টেমে স্কেলেবল হবে না।

নামের উপাদানগুলি পৃথক কলামে সঞ্চয় করুন। একটি ক্যারেক্টেশন (যখন আপনার পুরো নাম প্রয়োজন) এর সাথে ক্যারেক্টারগুলিতে একটি চরিত্র অনুসন্ধানের সাথে আলাদা করার চেয়ে কলামগুলিতে যোগদান করা প্রায় অবিচ্ছিন্নভাবে দ্রুত।

যদি, কোনও কারণে আপনি ক্ষেত্রটি বিভক্ত করতে না পারেন, কমপক্ষে অতিরিক্ত কলামগুলিতে রাখুন এবং সেগুলি স্থাপনের জন্য একটি সন্নিবেশ / আপডেট ট্রিগার ব্যবহার করুন। 3 এনএফ নয়, এটি গ্যারান্টি দেয় যে ডেটা এখনও সামঞ্জস্যপূর্ণ এবং আপনার প্রশ্নের ব্যাপকতর গতি বাড়িয়ে তুলবে। আপনি একই সাথে অতিরিক্ত কলামগুলি নিম্ন-কেসড (এবং যদি আপনি সেগুলি অনুসন্ধান করে থাকেন তবে সূচিকৃত) যাতে একই সাথে কেস ইস্যুতে ঝাঁকুনিতে না পড়ে তাও নিশ্চিত করতে পারেন।

এবং, যদি আপনি কলামগুলি এবং ট্রিগারগুলিও যোগ করতে না পারেন তবে সচেতন হন (এবং আপনার ক্লায়েন্টকে সচেতন করুন, এটি যদি ক্লায়েন্টের হয়ে থাকে) তবে এটি পরিমাপযোগ্য নয়।


(ক) অবশ্যই, আপনার অভিপ্রায় এই প্রশ্নের সাথে ব্যবহার করতে হয় যদি ঠিক তাই স্কিমা যে নামে পৃথক কলাম মধ্যে স্থাপন করা হয় টেবিল বদলে ক্যোয়ারী, আমি বিবেচনা চাই যে একটি বৈধ ব্যবহার করা। তবে আমি পুনরুক্তি করছি, ক্যোয়ারিতে এটি করা সত্যিই ভাল ধারণা নয়।


4
কখনও কখনও, আপনি এটি করতে হবে। মাইগ্রেশন স্ক্রিপ্টে আমার এটি দরকার, তাই আমি পারফরম্যান্সের বিষয়ে চিন্তা করি না।
ম্যাথিউ নাপোলি

@ ডিএফমিলার, হ্যাঁ, আমি তাই করেছি, তাই আমার যুক্তিযুক্ত এবং বিস্তারিত প্রতিক্রিয়া জানিয়েছি এবং আপনার আগ্রহের জন্য ধন্যবাদ। আমার লেখা কিছু নিয়ে যদি আপনার কাছে নির্দিষ্ট সমস্যা থাকে তবে এটিকে নির্দেশ করুন এবং আমি এটি উন্নতি করতে পারি কিনা তা দেখাব। আপনার বর্তমান মন্তব্য পরিস্থিতি উন্নত করতে বেশ অব্যর্থ, যদি এটি সত্যিই আপনার উদ্দেশ্য ছিল। অথবা সম্ভবত আপনি নেটে এলোমেলো মন্তব্যগুলি ছড়িয়ে দেওয়ার মতোই , এটি বলা শক্ত :-) আমি উত্তর দিয়ে দাঁড়িয়েছি অবশ্যই, সাব-কলামার অ্যাক্সেসটি স্কেবলযোগ্য নয় এবং প্রায়শই একটি খারাপ ধারণা, যদি না এটি ব্যবহারের উদ্দেশ্যে ব্যবহার করা হয় আসলে ফিক্সিং উপ-স্তম্ভাকার অ্যাক্সেস।
paxdiablo

3
প্রশ্নটি হল যে কীভাবে একক কলামটি 2 এ বিভক্ত করা যায় এবং তারপরে আপনি "তা করবেন না" বলে সাড়া দিন এবং তারপরে কেন তাদের বিভক্ত করা উচিত তা ব্যাখ্যা করার জন্য এগিয়ে যান। আপনার প্রথম অনুচ্ছেদে মনে হচ্ছে আপনি পক্ষে পক্ষে যুক্তি দিচ্ছেন বা সেগুলি একটি কলাম হিসাবে রাখছেন, তবে অন্য অনুচ্ছেদগুলি বিপরীতে বলে।
dfmiller

@ ডিএফমিলার, সম্ভবত আমি প্রশ্নটি ভুল বুঝেছি, কোয়েরিতে বা টেবিলে এই বিচ্ছেদটি করা হবে কিনা তা আমি এখন নিশ্চিত নই। আমি উত্তরটি আশাবাদী এটি আরও পরিষ্কার করে দেওয়ার বিষয়টি স্পষ্ট করে দিয়েছি।
paxdiablo

অনেক ভাল. আমি ডেটাবেস আপডেট ব্যতীত কোনও সিলেক্ট কোয়েরি ব্যবহার করার বিষয়টি বিবেচনা করি না। এটি একটি ভয়ানক ধারণা হবে।
dfmiller

7

এটা ব্যবহার কর

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX( `membername` , ' ', 2 ),' ',1) AS b, 
SUBSTRING_INDEX(SUBSTRING_INDEX( `membername` , ' ', -1 ),' ',2) AS c FROM `users` WHERE `userid`='1'

এটি ক্ষেত্র থেকে প্রথম এবং শেষ স্থানের সীমানাবিহীন সাবস্ট্রিং দখল করবে, যা সমস্ত পরিস্থিতিতে কাজ করে না। উদাহরণস্বরূপ, যদি নাম ক্ষেত্রটি "লিলি ভন স্কুট্প" হয়, তবে আপনি 'লিলি', 'শুটপ' প্রথম নাম, উপাধি হিসাবে পাবেন।
জন ফ্র্যাঙ্কলিন

5

প্রশ্নের সঠিক উত্তর না দিয়ে, একই সমস্যার মুখোমুখি হয়ে আমি এই কাজটি শেষ করেছি:

UPDATE people_exit SET last_name = SUBSTRING_INDEX(fullname,' ',-1)
UPDATE people_exit SET middle_name = TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(fullname,last_name,1),' ',-2))
UPDATE people_exit SET middle_name = '' WHERE CHAR_LENGTH(middle_name)>3 
UPDATE people_exit SET first_name = SUBSTRING_INDEX(fullname,concat(middle_name,' ',last_name),1)
UPDATE people_exit SET first_name = middle_name WHERE first_name = ''
UPDATE people_exit SET middle_name = '' WHERE first_name = middle_name

4

মাইএসকিউএলে এই বিকল্পটি কাজ করছে:

SELECT Substring(nameandsurname, 1, Locate(' ', nameandsurname) - 1) AS 
       firstname, 
       Substring(nameandsurname, Locate(' ', nameandsurname) + 1)    AS lastname 
FROM   emp  

স্ট্রিংকে দ্বিতীয় ক্ষেত্রের দিকে নিয়ে যাওয়ার জন্য
এম ফারাজ

3

কেবলমাত্র যেখানে আপনি এই জাতীয় ফাংশন চাইতে পারেন তা হল একটি আপডেটের ক্যোয়ারী যা আপনার টেবিলটিকে ফার্স্টনাম এবং লাস্টনাম পৃথক ক্ষেত্রে সংরক্ষণ করবে।

ডাটাবেস ডিজাইনের অবশ্যই কিছু নিয়ম মেনে চলতে হবে এবং ডেটাবেস নরমালাইজেশন সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলির মধ্যে রয়েছে


পোস্টার যেমনটি চেয়েছিল ঠিক তেমনই অপ্রয়োজনীয় মন্তব্য; এক মিলিয়ন বার হ'ল আপনার পক্ষে সর্বোত্তম নরমালাইজের জন্য স্ট্রিংকে বিভক্ত করার প্রয়োজন হতে পারে inac কেন বা কীভাবে এটিকে ভোট দেওয়া হয়েছে তা সম্পর্কে নিশ্চিত হন না।
ডেটিকন

বিভক্ত ক্ষেত্রগুলিতে সূচীপত্রগুলি মাইএসকিউএলকে একটি পাতাগুলিতে পরিণত করার মতোই অসম্ভব, তবে এটি লোকেরা এটি সম্পর্কে জিজ্ঞাসাবাদ থেকে বিরত রাখবে না। উত্তম উত্তর - ডাটাবেসগুলি আপনার পাতার মলচার চশমা নয়, ডেটা প্রতিফলিত করে।
হোল্ডঅফহাঙ্গার

2

আমার একটি কলাম ছিল যেখানে প্রথম এবং শেষ নাম দুটি ছিল একটি কলামে। প্রথম এবং শেষ নামটি কমা দ্বারা পৃথক করা হয়েছিল। নীচের কোডটি কাজ করেছে। চেক / সংশোধন করার ক্ষেত্রে কোনও ত্রুটি নেই। শুধু একটি বোবা বিভক্ত। এসকিউএল স্টেটমেন্ট কার্যকর করতে phpMyAdmin ব্যবহার করেছেন।

UPDATE tblAuthorList SET AuthorFirst = SUBSTRING_INDEX(AuthorLast,',',-1) , AuthorLast = SUBSTRING_INDEX(AuthorLast,',',1);

13.2.10 আপডেটের সিনট্যাক্স


1

এটি এখান থেকে smhg লাগে এবং মাইএসকিউএলে প্রদত্ত সাবস্ট্রিংয়ের সর্বশেষ সূচী থেকে কর্ট লাগে এবং তাদের সংহত করে। এটি মাইএসকিএল-এর জন্য, আমার কেবলমাত্র নামটির একটি শালীন বিভাজন পাওয়া উচিত ছিল প্রথম নামটির সাথে সর্বশেষ নামটি একটি একক শব্দের সাথে, প্রথম নামটি সেই একক শব্দের আগে সমস্ত কিছু যেখানে নামটি নাল, 1 শব্দ, 2 শব্দ, বা 2 টিরও বেশি শব্দ। অর্থ: নাল; মেরি; মেরি স্মিথ; মেরি এ স্মিথ; মেরি সু এলেন স্মিথ;

সুতরাং নামটি যদি একটি শব্দ বা নাল হয় তবে সর্বশেষ নামটি শূন্য হয়। যদি নাম> 1 শব্দ হয় তবে শেষ নামটি সর্বশেষ শব্দ এবং সর্বশেষ শব্দের আগে সমস্ত শব্দটির নাম রাখা উচিত।

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

নোট করুন যে এটি ফলাফলটিকেও ছাঁটাই করে তোলে, তাই আপনি নামের সামনে বা পরে কোনও ফাঁকা জায়গা শেষ করবেন না।

আমি কেবল অন্যদের জন্য এটি পোস্ট করছি যারা আমার প্রয়োজনীয় জিনিসগুলি সন্ধান করতে এখানে তাদের উপায় গুগল করতে পারে। এটি অবশ্যই কাজ করে এটি প্রথমটি নির্বাচন করে পরীক্ষা করে।

এটি এক সময়ের জিনিস, তাই আমি দক্ষতার বিষয়ে চিন্তা করি না।

SELECT TRIM( 
    IF(
        LOCATE(' ', `name`) > 0,
        LEFT(`name`, LENGTH(`name`) - LOCATE(' ', REVERSE(`name`))),
        `name`
    ) 
) AS first_name,
TRIM( 
    IF(
        LOCATE(' ', `name`) > 0,
        SUBSTRING_INDEX(`name`, ' ', -1) ,
        NULL
    ) 
) AS last_name
FROM `users`;


UPDATE `users` SET
`first_name` = TRIM( 
    IF(
        LOCATE(' ', `name`) > 0,
        LEFT(`name`, LENGTH(`name`) - LOCATE(' ', REVERSE(`name`))),
        `name`
    ) 
),
`last_name` = TRIM( 
    IF(
        LOCATE(' ', `name`) > 0,
        SUBSTRING_INDEX(`name`, ' ', -1) ,
        NULL
    ) 
);

0

পদ্ধতিটি প্রথম_নাম ক্ষেত্রটিতে ডেটা উপস্থিত হওয়ার পরে আমি প্রথম_নামকে প্রথম নাম এবং সর্বশেষ নাম হিসাবে বিভক্ত করতাম। এটি কেবলমাত্র সর্বশেষ নাম ফিল্ডে সর্বশেষ শব্দটি রাখবে, সুতরাং "জন ফিলিপস সউসা" "জন ফিলিপস" প্রথম নাম এবং "সৃসা" পদবি হবে। এটি ইতিমধ্যে ঠিক করা কোনও রেকর্ড ওভাররাইট করা এড়ানো যায়।

set last_name=trim(SUBSTRING_INDEX(first_name, ' ', -1)), first_name=trim(SUBSTRING(first_name,1,length(first_name) - length(SUBSTRING_INDEX(first_name, ' ', -1)))) where list_id='$List_ID' and length(first_name)>0 and length(trim(last_name))=0

0
UPDATE `salary_generation_tbl` SET
    `modified_by` = IF(
        LOCATE('$', `other_salary_string`) > 0,
        SUBSTRING(`other_salary_string`, 1, LOCATE('$', `other_salary_string`) - 1),
        `other_salary_string`
    ),
    `other_salary` = IF(
        LOCATE('$', `other_salary_string`) > 0,
        SUBSTRING(`other_salary_string`, LOCATE('$', `other_salary_string`) + 1),
        NULL
    );

-3

mysql 5.4 একটি দেশীয় বিভক্ত ফাংশন সরবরাহ করে:

SPLIT_STR(<column>, '<delimiter>', <index>)

1
আপনি কি ডকুমেন্টেশন একটি লিঙ্ক প্রদান করতে পারেন। Dev.mysql.com এর একটি অনুসন্ধান শুকিয়ে আসে। বিভাগ 12.5 এই ফাংশন জন্য মন্তব্যগুলিতে একটি সম্প্রদায় পরামর্শ আছে।
ডিআরহাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.