Google ডক্স এবং ড্রাইভ: QUERY ফাংশন৷ একটি কোয়েরি ভাষা ব্যবহার করে পিএইচপি-তে একটি ডেটাবেস অনুসন্ধান করা

উপাদান প্রস্তুত করার জন্য তার সাহায্যের জন্য Evgeny Namokonov ধন্যবাদ.

QUERY ফাংশন আপনাকে একটি SQL ক্যোয়ারী ব্যবহার করে একটি টেবিল থেকে প্রয়োজনীয় সারি নির্বাচন করতে এবং সেগুলিকে সাজাতে দেয়৷

ফাংশন সিনট্যাক্স:

=QUERY(ডেটা; অনুরোধ; [হেডার])

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

সুতরাং, অনুরোধ গঠনের নিয়ম:

  1. অনুরোধ উদ্ধৃতি চিহ্ন নির্দেশিত হয়.
  2. প্রশ্নটি কীওয়ার্ড ব্যবহার করে:
    1. SELECT - সোর্স টেবিল থেকে কোন কলাম আনলোড করতে হবে এবং কোন ক্রমে তা নির্ধারণ করে। যেমন: "সিলেক্ট এ, সি, ডি, বি"। আপনি যদি কলাম শিরোনামের পরিবর্তে একটি তারকাচিহ্ন ("নির্বাচন *") বাদ দেন বা নির্দিষ্ট করেন, তবে সমস্ত কলাম মূল ক্রমে লোড হবে।
    2. WHERE একটি কীওয়ার্ড যা নির্বাচন করা হয় সেই শর্তগুলি অনুসরণ করে। এটি ছাড়া, মূল পরিসরের সমস্ত সারি লোড হবে৷
    3. GROUP BY - নির্দিষ্ট ক্ষেত্র অনুসারে গোষ্ঠীর মান।
    4. পিভট - আপনাকে একটি পিভট টেবিলের মতো কিছু তৈরি করতে দেয়, উৎস টেবিলের একটি নির্দিষ্ট ক্ষেত্র থেকে মান অনুসারে ডেটা গ্রুপ করে।
    5. ORDER BY - বাছাই নির্দিষ্ট করে। উদাহরণ স্বরূপ: “C DESC দ্বারা ORDER” - কলাম সি দ্বারা অবরোহ ক্রমে সাজান।
    6. LIMIT - প্রত্যাবর্তিত সারির সংখ্যা সীমিত করে। উদাহরণস্বরূপ: "সীমা 50"।
    7. অফসেট - পরিসরের শুরু থেকে একটি নির্দিষ্ট সংখ্যক লাইন এড়িয়ে যায়। উদাহরণস্বরূপ: "অফসেট 100"। LIMIT এর সাথে মিলিত হলে, এই কীওয়ার্ডটি প্রথমে কার্যকর হয়, যার অর্থ LIMIT 70 OFFSET 30 ব্যবহার করলে 31 থেকে 100 পর্যন্ত সারি দেখাবে।
    8. FORMAT - একটি নির্দিষ্ট প্যাটার্ন অনুযায়ী নির্দিষ্ট কলামের বিন্যাস নির্ধারণ করে।
    9. LABEL - আপনাকে আউটপুটে কলামের নাম পরিবর্তন করতে দেয়। উদাহরণস্বরূপ, “লেবেল MAX(D) ‘2016 সালে গড়।’” সর্বাধিক 2016-এর পরিবর্তে, জেনারেট করা সার্চ ফলাফলের শিরোনাম থাকবে “2016-এ গড়।”

API ক্যোয়ারী ভাষার বিষয়ে Google-এর সাহায্য এখানে পাওয়া যাবে: https://developers.google.com/chart/interactive/docs/querylanguage

চলুন অনুশীলনে QUERY ব্যবহার করার কয়েকটি উদাহরণ দেখি।

একটি সাধারণ উদাহরণ: একটি টেবিল থেকে একটি নির্দিষ্ট বিষয়ে বই নির্বাচন করা

একটি সাধারণ উত্স টেবিল থেকে আমরা বিষয় অনুসারে বইগুলির একটি তালিকা তৈরি করব:

এই ক্ষেত্রে, আমরা একটি পৃথক শীটে ড্রপ-ডাউন তালিকা থেকে বিষয় নির্বাচন করব:

এই সমস্যাটি সমাধান করার জন্য QUERY ফাংশনটি দেখতে এইরকম হবে:

=QUERY(বই'!A1:C; "A, C যেখানে B = ' নির্বাচন করুন"& A1& "'সি ডেসকে অর্ডার করুন'; 1 )

আমরা কলাম A এবং C থেকে 'Book'!A1:C পরিসরে ডেটা পুনরুদ্ধার করছি। আমরা সেল A1-এ ড্রপ-ডাউন তালিকা থেকে নির্বাচিত মানদণ্ড ব্যবহার করে এই পরিসরের কলাম B (বিষয়) দ্বারা ডেটা ফিল্টার করি। আমরা উৎস পরিসরের কলাম C দ্বারা অবরোহ ক্রমে সাজাই এবং আমাদের নির্বাচনে হেডার যোগ করি (QUERY ফাংশনের শেষ আর্গুমেন্ট = 1)।

GROUP BY এবং PIVOT ব্যবহার করে ডেটা গ্রুপ করা

আপনি দুটি কীওয়ার্ড ব্যবহার করে QUERY ব্যবহার করে ডেটা গ্রুপ করতে পারেন: GROUP BY এবং PIVOT; নীচে আমরা তাদের সাথে উদাহরণগুলি দেখব।

আমরা যে টেবিলের সাথে কাজ করব:

কাজটি হবে প্রতিটি বিষয়ের বিক্রয়ের পরিমাণ প্রদর্শন করা, অর্থাৎ, কলাম B দ্বারা ডেটা গ্রুপ করা।

চলো আমরা শুরু করি গ্রুপ করে,ফাংশন টেক্সট এই মত হবে:

= প্রশ্ন ('বই'!A1:C6;"B, যোগফল (C) গ্রুপ B দ্বারা নির্বাচন করুন")

অনুগ্রহ করে মনে রাখবেন: ফাংশনটি কাজ করার জন্য, গ্রুপিং (B দ্বারা গ্রুপ) ছাড়াও, কমপক্ষে একটি সমষ্টিগত ফাংশন প্রয়োজন, আমাদের ক্ষেত্রে এটি যোগফল(C)। ঠিক সেই ক্ষেত্রে, আমি QUERY-এর জন্য সমস্ত একত্রিতকরণ ফাংশন লিখব: sum(), max(), min(), avg() এবং count()।

আমাদের সূত্রের ফলাফল:

GROUP BY ব্যবহার করে একাধিক কলাম দ্বারা গোষ্ঠীভুক্ত করা সম্ভব, এটি করার জন্য, নীচের ফাংশনের মতো তাদের তালিকাভুক্ত করুন এবং SELECT-এ এই কলামগুলি যোগ করতে ভুলবেন না:

PIVOT ব্যবহার করে গ্রুপিং।

অনুগ্রহ করে মনে রাখবেন যে এখানে SELECT এ আপনাকে B কলাম লিখতে হবে না, যার দ্বারা ডেটা গ্রুপ করা হবে।

এখন পর্যন্ত, পার্থক্য হল যে গোষ্ঠীবদ্ধ উপাদানগুলি কলামে সাজানো হয়েছে, সারিতে নয়, যেমন GROUP BY-তে।

গ্রুপিং এর জন্য আরেকটি কলাম যোগ করা যাক।

আপনি দেখতে পাচ্ছেন - দুটি গোষ্ঠীবদ্ধ কলাম একটি ক্ষেত্রে প্রদর্শিত হয়, কমা দ্বারা পৃথক করা হয়। এটি হল PIVOT এবং GROUP BY-এর মধ্যে মূল পার্থক্য; সেখানে যদি প্রতিটি গ্রুপিং কলাম একটি পৃথক কলাম দখল করে, তাহলে PIVOT-এ আপনি বিভিন্ন উপাদান থেকে অনন্য ক্ষেত্র সহ একটি পিভট টেবিলের মতো কিছু পাবেন। এই ক্ষেত্রগুলি ব্যবহার করে, যাইহোক, আপনি GLOOKUP বা অনুসন্ধান ব্যবহার করে খুব সহজভাবে পছন্দসই মানটি অনুসন্ধান করতে পারেন।

আমরা বিষয় অনুসারে গড়/সর্বোচ্চ মান সহ একটি পিভট টেবিল তৈরি করি

এই উদাহরণে, আমরা একটি ছোট পিভট টেবিল তৈরি করব যা দুই বছরের জন্য বিষয় অনুসারে গড় মান প্রদর্শন করবে:

প্রশ্ন(বই'!A1:D; "এভিজি (সি), গড় (ডি) পিভট বি নির্বাচন করুন"; 1 )

আমরা একটি অনুরূপ পরিসর ব্যবহার করি (আগেরটির বিপরীতে, এটি 2015 এবং 2016-এর জন্য বিক্রি হয়েছে), কলাম C এবং D (SELECT avg(C), avg(D)) এর গড় বের করে এবং কলাম B (বিষয়) দ্বারা গোষ্ঠীবদ্ধ করি।

আমরা সুবিধাজনক প্রদর্শনের জন্য ফলাফল স্থানান্তর করি (ট্রান্সপোজ ফাংশন ব্যবহার করে):

আপনি avg (গড়) এর পরিবর্তে অন্যান্য ফাংশন ব্যবহার করতে পারেন, উদাহরণস্বরূপ সর্বাধিক (সর্বোচ্চ মান):

অথবা গড় এবং সর্বোচ্চ উভয় প্রদর্শন করুন, কিন্তু শুধুমাত্র কলাম D এর জন্য:

গড় (ডি), সর্বোচ্চ (ডি) নির্বাচন করুন

কেস "একটি নির্দিষ্ট তারিখ থেকে ডেটা নির্বাচন করে গড় বিল গণনা করা"

স্ক্রিনশটটি ডেটা অ্যারে দেখায় যা আমরা কাজ করব:

আমাদের কাজ: 1 এপ্রিল থেকে শুরু হওয়া বিক্রয় সহ লাইন নির্বাচন করুন এবং ক্লায়েন্টের সংখ্যা ব্যবহার করে তাদের জন্য গড় প্রাপ্তি গণনা করুন, অর্থাৎ একটি ওজনযুক্ত গড় অর্জন করুন।

চল শুরু করি. একটি নির্দিষ্ট তারিখ থেকে শুরু হওয়া গড় বিল (কলাম C) দ্বারা গুণিত ক্লায়েন্টের সংখ্যা (কলাম B) সহ একটি QUERY তৈরি করা যাক:

একটি QUERY সূত্রে একটি তারিখ ব্যবহার করার সঠিক উপায় হল:

  • QUERY শুধুমাত্র yyyy-mm-dd ফর্ম্যাটে তারিখগুলির সাথে কাজ করে৷ সেল E1 থেকে তারিখটিকে এই প্রকারে রূপান্তর করতে, "yyyy-mm-dd" শর্ত সহ TEXT সূত্রটি ব্যবহার করুন;
  • তারিখের আগে এবং অ্যাপোস্ট্রফির আগে আপনাকে তারিখ লিখতে হবে;
  • আপনাকে তারিখ সহ কক্ষে একটি রেফারেন্স করতে হবে না, তবে এটি সরাসরি QUERY-এ লিখুন, তারপর সূত্রটি এইরকম দেখাবে:
  • তারিখটি উভয় পাশে একক উদ্ধৃতি চিহ্ন (‘) দ্বারা বেষ্টিত।

আসুন আমরা যা পেয়েছি তাতে ফিরে যাই। আমাদের সূত্র নিম্নলিখিত অ্যারে ডেটা তৈরি করেছে:

এগুলি গ্রাহকের সংখ্যা এবং গড় বিলের লাইন-বাই-লাইন পণ্য। আমাদের তাদের সারসংক্ষেপ করতে হবে; এটি করতে, আমরা SUM সূত্রের আগে প্রবেশ করি:

গড় চেক পেতে, ফলাফলের সংখ্যাটিকে নির্বাচিত লাইনে গ্রাহকদের মোট পরিমাণ দ্বারা ভাগ করতে হবে। QUERY-এর ব্যবহারকে শক্তিশালী করতে, আবার এই সূত্রটি ব্যবহার করা যাক।

আমরা পূর্ববর্তী সূত্রটি গ্রহণ করি, B*C যোগফল(B) এ পরিবর্তন করি এবং নিম্নলিখিত নির্মাণ পাই:

অবশেষে, আমরা সূত্রগুলি একত্রিত করি:

সবকিছু কাজ করে, হুররে! 53 (এই ফলাফলটি উপরের বাম কোণে টুলটিপে দেখা যেতে পারে) - গড় বিল ক্লায়েন্টের সংখ্যা বিবেচনা করে, একটি ওজনযুক্ত গড় ব্যবহার করে গণনা করা হয়।

কেস "QUERY এবং ড্রপ-ডাউন তালিকা"

বই বিক্রির সাথে একটা সাইন নেওয়া যাক। এর উপর ভিত্তি করে, আমরা একটি ড্রপ-ডাউন তালিকা সহ সমস্ত বিষয় এবং QUERY সূত্র সহ একটি প্রতিবেদন তৈরি করব, যা নির্বাচিত বিষয়ের বইগুলি প্রদর্শন করে এবং সেগুলিকে বিক্রয় অনুসারে সাজায়৷

সুতরাং, ড্রপ ডাউন তালিকা. প্রথমে, আসুন একটি নতুন শীট তৈরি করি (আসুন বলি আমাদের আসল টেবিলটি বিশাল, এবং আমরা অন্য শীটে সমস্ত বিশ্লেষণ করতে চাই)। সেল A1-এ ডান-ক্লিক করুন এবং নির্বাচন করুন ডেটা চেকিং.

ভিতরে নিয়মপছন্দ করা তালিকা মান, কমা দ্বারা পৃথক করা আমাদের সমস্ত বিষয় তালিকাভুক্ত করুন এবং ক্লিক করুন সংরক্ষণ:

তালিকা এই মত পরিণত হয়েছে:

সংলগ্ন কক্ষ A2 এ আমরা নিম্নলিখিত সূত্রটি প্রবেশ করি:

=QUERY(বই'!A1:C13, "A, C যেখানে B = ' নির্বাচন করুন"& A1& "'সি ডেসকে অর্ডার করুন')

এবং আসুন এটিকে টুকরো টুকরো করে ভেঙে ফেলি:

  • 'বই'!A1:C13 - প্রাথমিক পরিসর, বিক্রয়, বই এবং বিষয় সহ টেবিল।
  • SELECT A, C - ফাংশন দ্বারা উত্পন্ন টেবিলে এই কলামগুলি থেকে ডেটা থাকবে, অর্থাৎ বইয়ের শিরোনাম এবং বিক্রয়।
  • যেখানে B = '»&A1&»' শুধুমাত্র সেই বইগুলিকে নির্বাচন করে যার বিষয় (কলাম B-এ) A1 কক্ষে নির্দিষ্ট করা মেলে। সিনট্যাক্সের দিকে মনোযোগ দিন: কক্ষ থেকে পাঠ্যটি অ্যাপোস্ট্রোফের মধ্যে নির্দেশিত হয় যা অনুরোধের পাঠ্যকে উল্লেখ করে। তাদের পরে রয়েছে উদ্ধৃতি (আমরা অনুরোধ পাঠ্যটি বন্ধ করি), একটি অ্যাম্পারস্যান্ড (আমরা সেল থেকে পাঠ্যটি অনুরোধ পাঠ্যে সংযুক্ত করি), ঘরের ঠিকানা, আরেকটি অ্যাম্পারস্যান্ড, যার পরে অনুরোধের পাঠ্যটি উদ্ধৃতিতে চলতে থাকে।
  • C DESC দ্বারা ORDER - কলাম B (বিক্রয়) দ্বারা অবরোহী ক্রমে ডেটা সাজান।

ফলাফল:

সেল A1-এ বিষয়কে দর্শনে পরিবর্তন করে, আমরা বিক্রয় অনুসারে সাজানো শুধুমাত্র দর্শনের বই পাব। আরামপ্রদ.

যদি আমাদের উৎস সারণীতে একটি তারিখ থাকে, তাহলে আমরা এটিকে QUERY শর্তে যোগ করতে পারতাম এবং নির্বাচিত দিন, মাস, সপ্তাহের জন্য ডেটা প্রদর্শন করতে পারতাম - এইভাবে আমরা একটি প্রস্তুত বিক্রয় প্রতিবেদন পেতে পারি যা প্রতিবার আবার কম্পাইল করার প্রয়োজন নেই৷

একাধিক ডেটা ব্যাপ্তি নিয়ে প্রশ্ন

QUERY ফাংশনের প্রথম আর্গুমেন্টটি বেশ কয়েকটি ডেটা ব্যাপ্তি সমন্বিত একটি অ্যারে হতে পারে৷ প্রধান জিনিস হল যে এই রেঞ্জগুলি একই কাঠামোর সাথে টেবিল।

রেঞ্জগুলি কোঁকড়া ধনুর্বন্ধনীতে সেমিকোলন দ্বারা পৃথক করা হয়েছে:

=QUERY((পরিসীমা 1; পরিসীমা 2; পরিসীমা 3; পরিসীমা 4);…

এটি নোট করা গুরুত্বপূর্ণ: এই ক্ষেত্রে, কোয়েরির ভিতরের কলামগুলি অক্ষর দ্বারা মনোনীত করা হয় না, যেমন অন্যান্য ক্ষেত্রে (A, B, AH, CZ, এবং অন্যান্য), কিন্তু ColN আকারে, যেখানে N হল কলাম সংখ্যা

টেলিগ্রামে চ্যানেল "গুগল শীট - এটা সহজ"

এই নিবন্ধটির জন্য কেস প্রস্তুত করার জন্য তার সাহায্যের জন্য ইভজেনি নামোকোনভকে ধন্যবাদ। Evgeniy এবং আমি Google Sheets ব্যবহার করে একটি টেলিগ্রাম চ্যানেল চালাই।

mysql_db_query — নির্দিষ্ট ডাটাবেসে স্যুইচ করে এবং একটি অনুরোধ পাঠায়

বর্ণনা

সম্পদ mysql_db_query (স্ট্রিং $ডাটাবেস , স্ট্রিং $query [, সম্পদ $link_identifier ])

একটি মাইএসকিউএল কোয়েরির ফলাফলে একটি পয়েন্টার প্রদান করে বা৷ মিথ্যাত্রুটির ক্ষেত্রে। ফাংশন এছাড়াও ফিরে সত্য/মিথ্যাজন্য ঢোকান/হালনাগাদ/মুছে ফেলাসাফল্য/ব্যর্থতা নির্দেশ করার অনুরোধ।

mysql_db_query()নির্দিষ্ট ডাটাবেস নির্বাচন করে এবং নির্দিষ্ট ক্যোয়ারী চালায়। ঐচ্ছিক সংযোগ পয়েন্টার পরামিতি নির্দিষ্ট করা না থাকলে, ফাংশনটি শেষ খোলা সংযোগ ব্যবহার করবে। যদি কোন খোলা সংযোগ না থাকে, তাহলে ফাংশনটি ফাংশনের অনুরূপ একটি নতুন তৈরি করার চেষ্টা করবে mysql_connect()পরামিতি ছাড়াই বলা হয়।

এই ফাংশন দয়া করে নোট করুন নাপূর্ববর্তী ডাটাবেসে সংযোগটি সুইচ করে। অন্য কথায়, আপনি এই ফাংশনটি ব্যবহার করতে পারবেন না সাময়িকভাবেঅন্য ডাটাবেসে স্যুইচ করুন এবং ক্যোয়ারী চালান। আপনাকে ম্যানুয়ালি ফিরে যেতে হবে। সিনট্যাক্স ব্যবহার করার জন্য এটি অত্যন্ত বাঞ্ছনীয় database.tableএই ফাংশনটি ব্যবহার করার পরিবর্তে SQL কোয়েরিতে।

আরো দেখুন mysql_connect()এবং

সম্পদ mysql_query(স্ট্রিং ক্যোয়ারী [, রিসোর্স লিঙ্ক_আইডেন্টিফায়ার])

mysql_query()পাস করা পয়েন্টার দ্বারা উল্লেখিত সক্রিয় সার্ভার ডাটাবেসে একটি অনুরোধ পাঠায়। যদি link_identifier বাদ দেওয়া হয়, শেষ খোলা সংযোগ ব্যবহার করা হয়। যদি কোন খোলা সংযোগ না থাকে, ফাংশনটি ফাংশনের অনুরূপ DBMS-এর সাথে সংযোগ করার চেষ্টা করে mysql_connect()পরামিতি ছাড়া। ক্যোয়ারী ফলাফল বাফার করা হয়.

মন্তব্য:ক্যোয়ারী স্ট্রিং অবশ্যই সেমিকোলন দিয়ে শেষ হবে না।

শুধুমাত্র নির্বাচন করুন, দেখান, ব্যাখ্যা করুন, বর্ণনা করুন, mysql_query()অনুরোধের ফলাফলে একটি পয়েন্টার ফেরত দেয়, বা মিথ্যাযদি অনুরোধ পূরণ না হয়।
অন্যান্য ক্ষেত্রে (ঢোকান, আপডেট, মুছে ফেলুন, ড্রপ করুন, ইত্যাদি), mysql_query()রিটার্ন সত্যসফল অনুরোধের ক্ষেত্রে এবং মিথ্যাত্রুটির ক্ষেত্রে। মান সমান নয় মিথ্যানির্দেশ করে যে অনুরোধটি সফলভাবে সম্পন্ন হয়েছে। এটি প্রভাবিত বা ফিরে আসা সারির সংখ্যা বলে না। এটা খুবই সম্ভব যে একটি সফল প্রশ্ন একটি একক সারিকে প্রভাবিত করবে না।

নিম্নলিখিত অনুরোধ ভুলভাবে প্রণয়ন করা হয় এবং mysql_query()ফিরে আসবে মিথ্যা :

mysql_query()এছাড়াও ভুল বলে বিবেচিত হয় এবং ফিরে আসবে মিথ্যা, অনুরোধে উল্লেখিত টেবিলের সাথে কাজ করার জন্য আপনার যথেষ্ট অধিকার না থাকলে।

ক্যোয়ারী ফলাফলের সাথে কাজ করার সময়, আপনি ফাংশনটি ব্যবহার করতে পারেন mysql_num_rows()একটি SELECT ক্যোয়ারী, সারি, বা দ্বারা প্রত্যাবর্তিত নম্বর খুঁজে পেতে mysql_ প্রভাবিত_সারি() DELETE, INSERT, REPLACE, অথবা UPDATE ক্যোয়ারী দ্বারা প্রক্রিয়াকৃত সারির সংখ্যা খুঁজে পেতে।

শুধুমাত্র প্রশ্নের জন্য নির্বাচন করুন, দেখান, বর্ণনা করুন, ব্যাখ্যা করুন, ফাংশন mysql_query()ফলাফলে একটি পয়েন্টার প্রদান করে যা একটি ফাংশনে ব্যবহার করা যেতে পারে mysql_fetch_array()এবং অন্যান্য ফাংশন যা প্রশ্নের ফলাফলের সাথে কাজ করে। আপনি যখন ফলাফলের সাথে কাজ শেষ করেন, আপনি ফাংশন ব্যবহার করে এটি সংরক্ষণ করতে ব্যবহৃত সংস্থানগুলি ছেড়ে দিতে পারেন

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

আমি কোয়েরিটিকে Google পত্রকের সবচেয়ে দরকারী বৈশিষ্ট্যগুলির মধ্যে একটি বলে মনে করি৷ কিন্তু গুগল হেল্প এটিকে অতিমাত্রায় বর্ণনা করে এবং এই ফাংশনের সম্পূর্ণ শক্তি প্রকাশ করা হয় না। ঘনিষ্ঠভাবে পরীক্ষা করার পরে, এটি স্পষ্ট হয়ে ওঠে যে এটি বিদ্যমান বেশিরভাগ ফাংশন প্রতিস্থাপন করতে সক্ষম।

QUERY এর সাথে কাজ করার জন্য, আপনার SQL এর প্রাথমিক জ্ঞানের প্রয়োজন হবে। যারা জানেন না তাদের জন্য চিন্তা করবেন না, QUERY ফাংশন আসলে খুব মৌলিক SQL বৈশিষ্ট্য সমর্থন করে।

QUERY সিনট্যাক্স

QUERY(ডেটা; অনুরোধ; [হেডার])
  • তথ্য— এটি এমন একটি পরিসর যা এসকিউএল কোয়েরির ডাটাবেস হিসেবে কাজ করবে;
  • অনুরোধ- এসকিউএল ক্যোয়ারী টেক্সট;
  • হেডারএকটি ঐচ্ছিক আর্গুমেন্ট যেখানে আপনি উল্লেখ করতে পারেন যে অ্যারের প্রথম সারিগুলির কতগুলি শিরোনাম রয়েছে৷

আরও তথ্যের উপলব্ধি সর্বাধিক করতে, আমি নিম্নলিখিত Google পত্রকটি খোলার এবং অনুলিপি করার পরামর্শ দিই৷

আপনি যে ডক্সের একটি কপি তৈরি করেছেন সেখানে একাধিক শীট রয়েছে৷ DB শীট হল সেই ডাটাবেস যা আমরা QUERY ফাংশন ব্যবহার করে অ্যাক্সেস করব। লেভেল শীটগুলিতে উদাহরণ রয়েছে যা আমরা এই নিবন্ধে দেখব। প্রতিটি নতুন স্তরের সাথে উদাহরণটি আরও জটিল হয়ে উঠবে।

Query ফাংশনে SQL ক্যোয়ারী প্ল্যান

যেকোন SQL ক্যোয়ারীতে আলাদা ব্লক থাকে, যেগুলোকে প্রায়ই অপবাদ বলা হয়। ক্যোয়ারী ফাংশনের জন্য এসকিউএল গুগল ভিজ্যুয়ালাইজেশন এপিআই কোয়েরি ভাষা সিনট্যাক্স ব্যবহার করে, যা নিম্নলিখিত ধারাগুলিকে সমর্থন করে:

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

হ্যালো ওয়ার্ল্ড ফর কোয়েরি (নির্বাচন) ফাংশন

আসুন Level_1 শীটে যাই এবং A1 কক্ষের সূত্রটি দেখি।

প্রশ্ন (DB!A1:L1143;"নির্বাচন * সীমা 100")

সূত্রের অংশ " DB!A1:L1143"ডাটাবেসের জন্য দায়ী যা থেকে আমরা স্যাম্পলিং করব। দ্বিতীয় অংশ " * সীমা 100 নির্বাচন করুন"নিবেদনের পাঠ্যটিই রয়েছে৷ এই ক্ষেত্রে "*" চিহ্নের অর্থ হল ডাটাবেসের মধ্যে থাকা সমস্ত ক্ষেত্র ফেরত দেওয়া। ব্যবহার করে " সীমা 100» আমরা আউটপুট সর্বোচ্চ 100 লাইনে সীমাবদ্ধ করি। এটি সবচেয়ে সহজ অনুরোধের একটি উদাহরণ। আমরা ডাটাবেস থেকে প্রথম 100টি সারি নির্বাচন করেছি। এটি কোয়েরি ফাংশনের জন্য এক ধরণের "হ্যালো ওয়ার্ল্ড"।

আমরা ফিল্টার এবং বাছাই ব্যবহার করি (কোথায়, অর্ডার দিয়ে)

শীট লেভেল_2 এ যান। আসুন শুধুমাত্র আমাদের প্রয়োজনীয় কিছু ক্ষেত্র নির্বাচন করি এবং ফিল্টারিং এবং সাজানোর শর্ত সেট করি। উদাহরণস্বরূপ, আমরা 22-25 অক্টোবর, 2015 সময়ের জন্য শুধুমাত্র ক্যাম্পেইন_1 এবং ক্যাম্পেইন_2 প্রচারাভিযানের জন্য ডেটা ব্যবহার করি। সেশনের পরিমাণ অনুসারে সেগুলিকে সাজানো যাক। ফিল্টার এবং সাজানোর জন্য, আপনাকে অনুরোধের পাঠ্যে অপবাদের একটি বিবরণ যোগ করতে হবে কোথায়এবং অর্ডার. ফলাফল সারণিতে উপরে বর্ণিত উদাহরণ প্রদর্শন করতে, আমাদের প্রচারাভিযান, তারিখ এবং অধিবেশন ক্ষেত্র প্রয়োজন। তাদেরই অপবাদের তালিকায় থাকা দরকার নির্বাচন করুন.

ডাটাবেস ক্ষেত্রগুলি ওয়ার্কশীটের কলামগুলির নামের মাধ্যমে অ্যাক্সেস করা হয় যেখানে ডাটাবেসটি অবস্থিত।

আমাদের ক্ষেত্রে, ডিবি শীটে থাকা ডেটা এবং নির্দিষ্ট ক্ষেত্রগুলিতে অ্যাক্সেস শীট কলামগুলির নাম হিসাবে লেখা হয়। সুতরাং, প্রয়োজনীয় ক্ষেত্রগুলি নিম্নলিখিত কলামগুলিতে অবস্থিত:

  • ক্ষেত্র তারিখ— কলাম A;
  • ক্ষেত্র প্রচারণা— কলাম B;
  • ক্ষেত্র সেশন— কলাম জি।

তদনুসারে, ফলাফল হিসাবে ডেটা আউটপুটের তালিকার জন্য দায়ী অনুরোধের অংশটি এইরকম দেখাবে:

A, B, G নির্বাচন করুন

অনুরোধের পরবর্তী একটি অপবাদ আছে কোথায়. একটি অনুরোধ লেখার সময়, অপবাদটি অবশ্যই এই নিবন্ধের প্রথম বিভাগে বর্ণিত ক্রমে স্থাপন করা উচিত। ঘোষণার পর কোথায়আমাদের ফিল্টারিং অবস্থার তালিকা করতে হবে। এই ক্ষেত্রে, আমরা প্রচারের নাম (প্রচারণা) এবং তারিখ (তারিখ) দ্বারা ডেটা ফিল্টার করি। আমরা বেশ কিছু ফিল্টারিং শর্ত ব্যবহার করি। অনুরোধের টেক্সটে অবশ্যই লজিক্যাল অপারেটর OR বা AND সব শর্তের মধ্যে থাকতে হবে। তারিখ দ্বারা ফিল্টার করা সংখ্যাসূচক এবং পাঠ্য মান দ্বারা ফিল্টার করার থেকে কিছুটা আলাদা; এর জন্য তারিখ অপারেটর ব্যবহার করা প্রয়োজন। ডেটা ফিল্টার করার জন্য দায়ী অনুরোধের অংশটি এইরকম দেখাবে:

কোথায় (A >= তারিখ"2015-10-22" এবং A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")

বন্ধনী ব্যবহার করে, আমরা ডেটা ফিল্টারিংকে দুটি যৌক্তিক অংশে বিভক্ত করেছি: প্রথম ফিল্টার তারিখ অনুসারে, দ্বিতীয়টি প্রচারাভিযানের নাম অনুসারে। এই পর্যায়ে, নির্বাচন করা ডেটা এবং ডেটা ফিল্টারিং অবস্থার বর্ণনা করার সূত্রটি এইরকম দেখাচ্ছে:

প্রশ্ন(DB!A1:L1143;" A, B, G যেখানে (A >= তারিখ"2015-10-22" এবং A নির্বাচন করুন<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")")

আপনি এটি অনুলিপি এবং পেস্ট করতে পারেন, উদাহরণস্বরূপ, এই পোস্টে উদাহরণ হিসাবে ব্যবহৃত নথির একটি নতুন শীটে, এবং নিম্নলিখিত ফলাফল পেতে পারেন:

স্বাভাবিক লজিক্যাল অপারেটর ছাড়াও (=,<, >) যেখানে ব্লক অতিরিক্ত ফিল্টারিং অপারেটর সমর্থন করে:

  • ধারণ করে— একটি স্ট্রিং-এ নির্দিষ্ট অক্ষরের বিষয়বস্তু পরীক্ষা করে। উদাহরণ স্বরূপ, যেখানে A-তে 'John' আছে সেই কলাম A থেকে জন আছে এমন সমস্ত মান ফিল্টারে ফিরে আসবে, উদাহরণস্বরূপ, জন অ্যাডামস, লং জন সিলভার;
  • সঙ্গে সঙ্গে শুরু হয়— উপসর্গ দ্বারা মান ফিল্টার করে, অর্থাৎ, লাইনের শুরুতে অক্ষর পরীক্ষা করে। উদাহরণস্বরূপ, 'en' দিয়ে শুরু হলে প্রকৌশল এবং ইংরেজির মান ফিরে আসবে;
  • দিয়ে শেষ হয়— একটি স্ট্রিং এর শেষে মান ফিল্টার করে। উদাহরণস্বরূপ, লাইন 'কাউবয় ' ফেরত দেওয়া হবে "'ছেলে' দিয়ে শেষ হবে" বা "'y' দিয়ে শেষ হবে";
  • মেলে- একটি নিয়মিত অভিব্যক্তি মেলে। যেমন: যেখানে মেলে '.*আমি একটি ভারত ও নাইজেরিয়া মূল্যবোধ ফিরিয়ে দেবে।
  • যেমন -নিয়মিত অভিব্যক্তির একটি সরলীকৃত সংস্করণ, এটি ওয়াইল্ডকার্ড অক্ষর ব্যবহার করে প্রদত্ত অভিব্যক্তির সাথে একটি স্ট্রিং মেলে কিনা তা পরীক্ষা করে। বর্তমানে, লাইক দুটি ওয়াইল্ডকার্ড অক্ষর সমর্থন করে: “%” মানে স্ট্রিং-এর যেকোনো অক্ষরের সংখ্যা এবং “_” মানে যেকোনো একটি অক্ষর। উদাহরণস্বরূপ, "যেখানে 'fre%' এর মতো নাম" লাইনের সাথে মিলবে 'ফ্রে ’, 'ফ্রেড ', এবং 'ফ্রেডি ’.

ক্যোয়ারী ইতিমধ্যেই একটি নির্দিষ্ট সময়ের জন্য ডেটা ফিল্টার করেছে এবং শুধুমাত্র আমাদের প্রয়োজনীয় প্রচারাভিযানগুলি ছেড়ে দিয়েছে৷ সেশনের সংখ্যার উপর নির্ভর করে নিচের ক্রমানুসারে ফলাফল বাছাই করা বাকি থাকে। এসকিউএল-এর জন্য অপবাদ ব্যবহার করে ঐতিহ্যগতভাবে এই প্রশ্নগুলির মধ্যে বাছাই করা হয় দ্বারা অর্ডার করুন. সিনট্যাক্সটি বেশ সহজ: আপনাকে শুধুমাত্র সেই ক্ষেত্রগুলিকে তালিকাভুক্ত করতে হবে যেগুলির দ্বারা আপনি ফলাফলটি সাজাতে চান এবং বাছাই করার ক্রমটিও নির্দিষ্ট করুন৷ ডিফল্ট ক্রম হল asc, অর্থাৎ, ascending। আপনি যদি ক্ষেত্রের নামের পরে desc পরামিতি নির্দিষ্ট করেন, তাহলে ক্যোয়ারীটি অপবাদে উল্লিখিত ক্রমানুসারে ফলাফল প্রদান করবে। দ্বারা অর্ডার করুনক্ষেত্র

আমাদের ক্ষেত্রে, অনুরোধের পাঠ্যের লাইনটি ফিল্টারিংয়ের জন্য দায়ী হবে:

জি ডেস্ক দ্বারা অর্ডার করুন

তদনুসারে, Level_2 শীটে সূত্রের চূড়ান্ত ফলাফল, যা আমাদের প্রয়োজনীয় সমস্যার সমাধান করে, এইরকম দেখায়:

প্রশ্ন(DB!A1:L1143;" A, B, G কোথায় (A >= তারিখ"2015-10-22" এবং A নির্বাচন করুন<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2") ORDER BY G DESC")

এখন আপনি ডেটা ফিল্টার এবং সাজানোর জন্য সাধারণ SQL সিনট্যাক্স এবং QUERY ফাংশন ব্যবহার করতে পারেন।

মিশ্র সিডিটাবেস::কোয়েরি(স্ট্রিং এসকিউএল bool উপেক্ষা_ত্রুটি= মিথ্যা, স্ট্রিং ত্রুটি_ অবস্থান="", অ্যারে বিকল্প = অ্যারে() )

পদ্ধতিটি ডাটাবেসে একটি ক্যোয়ারী চালায় এবং, যদি কোন ত্রুটি না ঘটে, ফলাফল প্রদান করে। সফল হলে, পদ্ধতিটি CDBRsult ক্লাসের একটি বস্তু প্রদান করে।
উপেক্ষা_ত্রুটি"সত্য" হলে, পদ্ধতিটি "মিথ্যা" ফিরে আসবে।
যদি একটি ত্রুটি ঘটে এবং পরামিতি উপেক্ষা_ত্রুটি"মিথ্যা" হয়, তারপর পদ্ধতিটি পৃষ্ঠার কার্য সম্পাদনে বাধা দেয়, প্রথমে নিম্নলিখিত ক্রিয়াগুলি সম্পাদন করে:

  1. AddMessage2Log ফাংশন কল করা হচ্ছে।
  2. বর্তমান ব্যবহারকারী যদি সাইট প্রশাসক হয়, বা ফাইলে /bitrix/php_interface/dbconn.phpপরিবর্তনশীল শুরু করা হয়েছে $DBDebug=সত্য;, তারপর ত্রুটির সম্পূর্ণ পাঠ্যটি স্ক্রিনে প্রদর্শিত হবে, অন্যথায় SendError ফাংশনটি কল করা হবে।
  3. ফাইল অন্তর্ভুক্ত করা হবে /bitrix/php_interface/dbquery_error.php, যদি এটি বিদ্যমান না থাকে, তাহলে ফাইলটি অন্তর্ভুক্ত করা হবে /bitrix/modules/main/include/dbquery_error.php

ওরাকল সংস্করণের জন্য নোট:
1. যদি একটি ত্রুটি ঘটে, যদি একটি লেনদেন খোলা হয়, তাহলে CDataBase::Rolback কার্যকর করা হয়।
2. BLOB, CLOB, LONG, ইত্যাদির মত পাঠ্য ক্ষেত্র সন্নিবেশ করান। (4000 অক্ষরের বেশি), CDatabase::QueryBind পদ্ধতি ব্যবহার করুন।
3. যদি, "SELECT" টাইপের একটি SQL ক্যোয়ারী চালানোর সময়, ভেরিয়েবল বাইন্ডিং প্রয়োজন হয়, তাহলে CDatabase::QueryBindSelect পদ্ধতি ব্যবহার করুন।

নন-স্ট্যাটিক পদ্ধতি।

নতুন D7 কার্নেলে পদ্ধতির একটি অ্যানালগ -।

অপশন

আরো দেখুন

ব্যবহারের উদাহরণ

ফাংশন: GetByID
লাইন: "; গ্লোবাল $DB; $where = ($GET_BY_SID=="N") ? " F.ID = "".intval($ID)।"" " : " F.VARNAME="".$DB- >ForSql($ID,50)।"" "; $strSql = "F.*, F.FIRST_SITE_ID, F.FIRST_SITE_ID LID, F.VARNAME, F.VARNAME SID, ".$DB->DateToCharFunction("F) নির্বাচন করুন .TIMESTAMP_X")।" TIMESTAMP_X, গণনা(স্বতন্ত্র D1.ID) C_FIELDS, গণনা(স্বতন্ত্র D2.ID) প্রশ্ন, গণনা(স্বতন্ত্র S.ID) STATUSES থেকে b_form F বাম যোগদান b_form_status S ON (S.FORM_ID = F.ID) বাম ক্ষেত্র যোগদান b_form (D1.FORM_ID = F.ID এবং D1.ADDITIONAL="Y") বাম যোগদান b_form_field D2 চালু (D2.FORM_ID = F.ID এবং D2.ADDITIONAL<>"Y") WHERE $ where GROUP BY F.ID "; $res = $DB->কোয়েরি($strSql, মিথ্যা, $err_mess.__LINE__); ফেরত $res; ) ?>

elar 17.09.2009 09:17:22

এই উদাহরণ, প্রোগ্রামিং ভাষায় কথা বলা, সম্পূর্ণরূপে কাজ করছে না।

ক্লাস "CForm" পাওয়া যায়নি, হয়তো এর জন্য আপনাকে কোনোভাবে অতিরিক্তভাবে বস্তুটি ঘোষণা করতে হবে। অনুরোধ একটি ত্রুটি দেয় কারণ ডাটাবেসে কোন সংজ্ঞায়িত ক্ষেত্র নেই (যা অনেক ব্যবহারকারীর জন্য সমস্যা হতে পারে)।

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

এই বিকল্পটি ব্যবহার করা সহজ:

এই কোডের সুবিধা হল যে এটি সাইটের যেকোন পৃষ্ঠায় কার্যকর করা হবে এবং এটি খুবই সহজ।

"বিট্রিক্স", 2001-2019, "1C-বিট্রিক্স", 2019



শেয়ার করুন