..

Mysqlga juniorcha va seniorcha so'rovlar

Loyihani qo'llab quvvatlash uchub buyerga bosing

Tasavvur qilaylik bizda sotilgan mahsulotlar ma’lumotlari saqlanadigan jadval bor. Unda mahsulot nomi, idenfikatori va vaqti kabi ma’lumotlar saqlanadi. Bizdan talab etiladigani esa buyurtmachiga statistika chiqarib berishim lozim. Odatda statistikalar haftalik yoki oylik ko’rinishda beriladi.

Junior bu holatda nima qiladi?

Albatta oylar yoki haftadagi kunlarning har biri bilan ma’lum shartlar asosida qayta qayta so’rov amalga oshiradi. Bu holatda esa ma’lumotlar ombori uchun so’rovlar soni oshib yuklamalar keltirib chiqaradi.

Psevdo kod:

for loop {
	date = getDate()
	query = "select query"
}

Seniorcha yechim:

Yuqoridagi muammoni mysqlning o’zidagi tayyor funksiyalardan foydalanib birgina so’rov asosida chiqarish imkoni mavjud.

Demak yuqoridagilarga asoslanib ushbu haftada sotilgan maxsulotlarni kunlik sonini chiqaramiz:

SELECT COALESCE( COUNT( id ), 0 ) AS count, DAYNAME( datetime ) as dayname FROM sales WHERE YEARWEEK( datetime ) = YEARWEEK( NOW() ) GROUP BY datetime;

Yoki unix timestamp saqlanadigan holat uchun:

SELECT COALESCE( COUNT( id ), 0 ) AS count, DAYNAME( FROM_UNIXTIME( datetime ) ) as dayname FROM sales WHERE YEARWEEK( FROM_UNIXTIME( datetime ) ) = YEARWEEK( NOW() ) GROUP BY FROM_UNIXTIME( datetime );

Oylar bo’yicha statistika:

SELECT COALESCE( COUNT( id ), 0 ) AS count, MONTHNAME( datetime ) as monthname, EXTRACT(YEAR_MONTH FROM datetime ) as month FROM sales GROUP BY EXTRACT(YEAR_MONTH FROM datetime);

Oylar bo’yicha statistika (unix timestamp uchun):

SELECT COALESCE( COUNT( id ), 0 ) AS count, MONTHNAME( FROM_UNIXTIME( datetime ) ) as monthname, EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME( datetime ) ) as month FROM sales GROUP BY EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME( datetime ) );

Yuqorida keltirilgan birgina so’rov asosida mysql mahsulotlarning sotilgan sonini hafta yoki oy nomlari asosida qaytaradi. Tayyor ma’lumot olingach, uni o’zingiz bilgan tilda manipulatsiya qilish qiyinchilik tug’dirmaydi.

Albatta bu bir kichik misol xolos, ammo sizning optimizatsiya masalasidagi qarashlaringizga oz bo’lsada tasir ko’rsata oladi degan umiddaman.