kabootar_y
جمعه 10 مهر 1394, 23:31 عصر
با سلام خدمت دوستان حرفه ای
من تا حالا با VIEW در MYSQL کار نکردم یعنی حقیقتش حتی دقیقا نمی دونم چی کار میکنه ولی از اونجا که فهمیدم که سرعت اجرای کوئری ها میشه قصد دارم استفاده کنم. حالا در این مورد چند سوال از حرفه ای های php دارم.
1- آیا استفاده از view امنیت رو کاهش میده یا افزایش؟ یا اصلا تاثیری بر امنیت نداره؟
2- آیا در سیستم های بزرگ (منظور من از بزرگ حجم زیاد اطلاعات در دیتابیس هست) بیشتر مورد استفاده قرار میگیره یا سیستم های کوچک و کم حجم؟
3- آیا هر بار که میخواهیم صفحه را لود کنیم باید view که باید ازش استفاده بشه رو update کنیم؟ یا اگر در جدولی که ازش view ساختیم تغییراتی ایجاد بشه نیازی به Update نیست و در خروجی اطلاعات جدید نمایش داده میشوند؟
4- آیا ممکنه به دلیلی که نمی دونم این view در دسترس نباشه (درصورتی که اگز در همون حالت از خود جدول واقعی خروجی میگرفتم با خطا مواجه نمی شد)؟
5- آخرین سوالم در مورد طرز استفاده صحیح از این ویژگی MYSQL هست. من دو تا روشی که به ذهنم رسیده رو میگم لطف کنید بگید کدوم بهتره و اگز راه بهتری هست هم لطف کنید راهنمایی بفرمایید
روش اول من:
// ساختن VIEW از کل جدول products
"CREATE OR REPLACE VIEW vw_products AS SELECT * FROM products"
// خروجی گرفتن ستون keywords از تمام محصولاتی که در دسته های فعال قرار دارند
"SELECT p.meta_keywords
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
// خروجی گرفتن از ستون های title, price, id که در دسته های فعال قرار دارند
"SELECT p.title,p.price, p.id
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
روش دوم من:
// ساختن VIEW اول از ستون meta_keywords جدول products که در دسته های فعال قرار دارند
"CREATE OR REPLACE VIEW vw_meta_keywords AS
SELECT p.meta_keywords
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
// ساختن VIEW دوم از ستون های title, price, id از جدول products که در دسته های فعال قرار دارند
"CREATE OR REPLACE VIEW vw_title_price_id AS
SELECT p.title,p.price, p.id
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
// خروجی گرفتن برای از ستون meta_keywords بدون شرط جدید (طبق شرط هایی که در ساخت VIEW مطرح شد)
"SELECT * FROM vw_meta_keywords"
// خروجی گرفتن از ستون های title, price, id بدون شرط جدید(طبق شرط های که در ساخت VIEW مطرح شد)
"SELECT * FROM vw_title_price_id"
من تا حالا با VIEW در MYSQL کار نکردم یعنی حقیقتش حتی دقیقا نمی دونم چی کار میکنه ولی از اونجا که فهمیدم که سرعت اجرای کوئری ها میشه قصد دارم استفاده کنم. حالا در این مورد چند سوال از حرفه ای های php دارم.
1- آیا استفاده از view امنیت رو کاهش میده یا افزایش؟ یا اصلا تاثیری بر امنیت نداره؟
2- آیا در سیستم های بزرگ (منظور من از بزرگ حجم زیاد اطلاعات در دیتابیس هست) بیشتر مورد استفاده قرار میگیره یا سیستم های کوچک و کم حجم؟
3- آیا هر بار که میخواهیم صفحه را لود کنیم باید view که باید ازش استفاده بشه رو update کنیم؟ یا اگر در جدولی که ازش view ساختیم تغییراتی ایجاد بشه نیازی به Update نیست و در خروجی اطلاعات جدید نمایش داده میشوند؟
4- آیا ممکنه به دلیلی که نمی دونم این view در دسترس نباشه (درصورتی که اگز در همون حالت از خود جدول واقعی خروجی میگرفتم با خطا مواجه نمی شد)؟
5- آخرین سوالم در مورد طرز استفاده صحیح از این ویژگی MYSQL هست. من دو تا روشی که به ذهنم رسیده رو میگم لطف کنید بگید کدوم بهتره و اگز راه بهتری هست هم لطف کنید راهنمایی بفرمایید
روش اول من:
// ساختن VIEW از کل جدول products
"CREATE OR REPLACE VIEW vw_products AS SELECT * FROM products"
// خروجی گرفتن ستون keywords از تمام محصولاتی که در دسته های فعال قرار دارند
"SELECT p.meta_keywords
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
// خروجی گرفتن از ستون های title, price, id که در دسته های فعال قرار دارند
"SELECT p.title,p.price, p.id
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
روش دوم من:
// ساختن VIEW اول از ستون meta_keywords جدول products که در دسته های فعال قرار دارند
"CREATE OR REPLACE VIEW vw_meta_keywords AS
SELECT p.meta_keywords
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
// ساختن VIEW دوم از ستون های title, price, id از جدول products که در دسته های فعال قرار دارند
"CREATE OR REPLACE VIEW vw_title_price_id AS
SELECT p.title,p.price, p.id
FROM vw_products p
INNER JOIN ".$pref."category_controller cc ON cc.product_id = p.id
INNER JOIN ".$pref."categories c ON c.id = cc.category_id
WHERE p.status = 1 AND c.status = 1
GROUP BY p.id"
// خروجی گرفتن برای از ستون meta_keywords بدون شرط جدید (طبق شرط هایی که در ساخت VIEW مطرح شد)
"SELECT * FROM vw_meta_keywords"
// خروجی گرفتن از ستون های title, price, id بدون شرط جدید(طبق شرط های که در ساخت VIEW مطرح شد)
"SELECT * FROM vw_title_price_id"