আমি কীভাবে SELECTএকটি মাইএসকিউএল টেবিলের শেষ সারিটি করতে পারি ?
আমি INSERTডেটা আইএনএন করছি এবং আমার আগের সারি থেকে একটি কলাম মান পুনরুদ্ধার করা দরকার।
auto_incrementটেবিলে একটি আছে।
auto_incrementআছে। আমি সর্বাধিক যুক্ত হওয়া একটি চাই।
আমি কীভাবে SELECTএকটি মাইএসকিউএল টেবিলের শেষ সারিটি করতে পারি ?
আমি INSERTডেটা আইএনএন করছি এবং আমার আগের সারি থেকে একটি কলাম মান পুনরুদ্ধার করা দরকার।
auto_incrementটেবিলে একটি আছে।
auto_incrementআছে। আমি সর্বাধিক যুক্ত হওয়া একটি চাই।
উত্তর:
হ্যাঁ, সেখানে একটি স্বয়ংক্রিয় সংযোজন আছে
আপনি যদি টেবিলের সমস্ত সারিটির সর্বশেষটি চান, তবে শেষ অবধি MAX(id)এটিই সঠিক উত্তর কোথায় ! ধরনের:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
idসূচীবদ্ধ করা হয়।
মনে রাখবেন যে সম্পর্কিত ডেটাবেজে টেবিলগুলি কেবল সারিগুলির সেট। এবং গণিতে সেটগুলি আনর্ডারড সংগ্রহ। প্রথম বা শেষ সারি নেই; পূর্ববর্তী সারি বা পরের সারি নেই।
আপনাকে প্রথমে কোনও ক্ষেত্রের দ্বারা আনর্ডার্ড করা সারিগুলির সেটটি বাছাই করতে হবে এবং তারপরে আপনি সংজ্ঞায়িত ক্রমে রেজাল্টসেটের মাধ্যমে পুনরাবৃত্তি মুক্ত করতে পারেন।
যেহেতু আপনার একটি অটো ইনক্রিমেন্টিং ক্ষেত্র রয়েছে, তাই আমি ধরে নিয়েছি যে আপনি এটি বাছাইয়ের ক্ষেত্র হতে চান। সেক্ষেত্রে আপনি নিম্নলিখিতগুলি করতে পারেন:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
দেখুন কীভাবে আমরা প্রথমে অরোর্ডার করা সারিগুলির সেটটি your_auto_increment_fieldসাজানো (যাতে আপনি যা বলেছিলেন) দ্বারা সাজানোর ক্রমে সাজানো হয়। তারপর আমরা সঙ্গে শুধুমাত্র প্রথম সারিতে resultset সীমিত LIMIT 1।
আপনি @ স্পেসিপিলের দ্বারা প্রস্তাবিত দুটি প্রশ্নের একক ক্যোয়ারিতে একত্রিত করতে পারেন যা দেখতে এরকম দেখাচ্ছে:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
এটি দ্রুত জ্বলন্ত কাজ করা উচিত, তবে INNODB টেবিলগুলিতে এটি অর্ডার + লিমিটের চেয়ে ধীরে ধীরে মিলিসেকেন্ডের ভগ্নাংশ।
answered Jun 14 at 9:41প্রায় 1 বছর 6 মাস আগের কথা :)
অনেক সারিযুক্ত টেবিলগুলিতে দুটি ক্যোয়ারী সম্ভবত দ্রুততর হয় ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
এটি সহজভাবে ব্যবহার করুন: PDO::lastInsertId
আপনি যদি সর্বাধিক যুক্ত হওয়া চান তবে একটি টাইমস্ট্যাম্প যুক্ত করুন এবং সর্বোচ্চ টাইমস্ট্যাম্পের মাধ্যমে বিপরীত ক্রমে অর্ডার করুন নির্বাচন করুন, সীমা 1। আপনি যদি আইডিতে যেতে চান তবে আইডির মাধ্যমে বাছাই করুন। আপনি কেবলমাত্র যুক্ত হওয়াটি যদি ব্যবহার করতে চান তবে ব্যবহার করুন mysql_insert_id।
প্রায় প্রতিটি ডাটাবেস সারণীতে একটি অটো_সংশোধন কলাম থাকে (সাধারণত আইডি)
আপনি যদি টেবিলের সমস্ত সারিগুলির শেষটি চান,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
অথবা
আপনি দুটি ক্যোয়ারী একক ক্যোয়ারিতে একত্রিত করতে পারেন যা দেখতে এরকম দেখাচ্ছে:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
এই কোয়েরিটি আপনার টেবিলের সর্বশেষ রেকর্ডটি আনতে ব্যবহৃত হয়েছিল।
এখানে অনেক উত্তর একই বলে (আপনার অটো ইনক্রিমেন্টের অর্ডার), যা ঠিক আছে, তবে আপনার যদি সূচিযুক্ত একটি স্বয়ংস্ক্রিখিত কলাম থাকে।
সাইড নোটে, আপনার যদি এমন ক্ষেত্র থাকে এবং এটি প্রাথমিক কী হয় তবে order byবনাম ব্যবহারের জন্য কোনও পারফরম্যান্স জরিমানা নেই select max(id)। প্রাথমিক কীটি হ'ল ডেটাবেস ফাইলগুলিতে কীভাবে ডেটা অর্ডার করা হয় (অন্তত InnoDB এর জন্য), এবং আরডিবিএমএস জানে যে ডেটাটি কোথায় শেষ হয় এবং এটি order by id + limit 1পৌঁছানোর মতোই হতে পারেmax(id)
এখন যখন অল্প স্বল্প সংখ্যক প্রাথমিক কী আপনার কাছে নেই তখন রাস্তাটি কম ভ্রমণ করা হয়। হতে পারে প্রাথমিক কীটি একটি প্রাকৃতিক কী, যা 3 টি ক্ষেত্রের সংমিশ্রণ ... যদিও সব হারিয়ে যায় না। প্রোগ্রামিং ভাষা থেকে আপনি প্রথমে সারিগুলির সংখ্যা পেতে পারেন
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
এবং তারপরে এই LIMITধারাটিতে প্রাপ্ত নম্বরটি ব্যবহার করুন
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
দুর্ভাগ্যক্রমে, মাইএসকিউএল একটি LIMITঅনুচ্ছেদে সাব-কোয়েরি, বা ক্লজটিতে ব্যবহারকারীর ভেরিয়েবলের অনুমতি দেবে না