**کد شما باید روی نسخهی استاندارد *MySQL* قابل اجرا باشد.** برای چک کردن سینتکس کد *SQL* خود میتوانید از **[این وبسایت](https://www.eversql.com/sql-syntax-check-validator/)** کمک بگیرید.
---
حمید یک برنامهنویس حرفهای است. او اخیراً به آشپزی علاقهمند شده و تصمیم گرفته تا یک وبسایت برای بهاشتراکگذاری دستور پختهای انحصاریاش راهاندازی کند. او میخواهد قابلیتهای پیشرفتهای را در وبسایتش ارائه دهد. برای مثال، این قابلیت که کاربران بتوانند مواد اولیهی موجودشان را در سایت ثبت کرده و سیستم بتواند لیست غذاهایی که با استفاده از مواد اولیهشان قابل پخت هستند را نمایش دهد. همچنین، کاربران امکان امتیازدهی (از ۱ تا ۵) به دستور پختها را دارند.
حمید بهخوبی از پس طراحی جداول دیتابیس سایتش برآمده، اما برای نوشتن کوئریهایش به کمک شما نیاز دارد.
# جزئیات پروژه
پایگاه دادهی اولیهی سایت حمید شامل ۶ جدول با اسامی و ساختارهای زیر است:
1. جدول کاربران (`users`):
| نام ستون | نوع | تعریف | ملاحضات |
|------------|----------------|------------------|------------------------------|
| `id` | `int(11)` | شناسهی کاربر | `primary key auto_increment` |
| `username` | `varchar(255)` | نام کاربری کاربر | |
2. جدول غذاها (`foods`):
| نام ستون | نوع | تعریف | ملاحضات |
|----------|----------------|-------------------|------------------------------|
| `id` | `int(11)` | شناسهی غذا | `primary key auto_increment` |
| `name` | `varchar(255)` | نام غذا | |
| `recipe` | `text` | متن دستور پخت غذا | |
3. جدول مواد اولیه (`ingredients`):
| نام ستون | نوع | تعریف | ملاحضات |
|------------------|-----------------|-----------------------|------------------------------|
| `id` | `int(11)` | شناسهی مادهی اولیه | `primary key auto_increment` |
| `name` | `varchar(255)` | نام مادهی اولیه | |
| `price_per_unit` | `decimal(10,2)` | قیمت واحد مادهی اولیه | |
4. جدول مواد اولیهی غذاها (`food_ingredients`):
| نام ستون | نوع | تعریف | ملاحضات |
|-----------------|-----------------|-------------------------|------------------------------|
| `id` | `int(11)` | شناسهی مادهی اولیهی غذا | `primary key auto_increment` |
| `food_id` | `int(11)` | شناسهی غذا | `foreign key (foods)` |
| `ingredient_id` | `int(11)` | شناسهی مادهی اولیه | `foreign key (ingredients)` |
| `amount` | `decimal(10,2)` | مقدار مادهی اولیه | |
5. جدول مواد اولیهی کاربران (`user_ingredients`):
| نام ستون | نوع | تعریف | ملاحضات |
|-----------------|-----------------|-------------------------|------------------------------|
| `id` | `int(11)` | شناسهی مادهی اولیهی کاربر | `primary key auto_increment` |
| `user_id` | `int(11)` | شناسهی کاربر | `foreign key (users)` |
| `ingredient_id` | `int(11)` | شناسهی مادهی اولیه | `foreign key (ingredients)` |
| `amount` | `decimal(10,2)` | مقدار مادهی اولیه | |
6. جدول امتیازات کاربران به غذاها (`ratings`):
| نام ستون | نوع | تعریف | ملاحضات |
|-----------|--------------|---------------|------------------------------|
| `id` | `int(11)` | شناسهی امتیاز | `primary key auto_increment` |
| `user_id` | `int(11)` | شناسهی کاربر | `foreign key (users)` |
| `food_id` | `int(11)` | شناسهی غذا | `foreign key (foods)` |
| `rate` | `tinyint(1)` | امتیاز | |
# مطلوبات
کوئریهای *SQL* خواستهشده از شما موارد زیر است (توجه کنید که هر کوئری نمرهای جداگانه دارد و اگر کوئری یک قسمت را نتوانستید بزنید، کوئریهایی که حل کردید را بفرستید و قسمت آن کوئری را خالی بگذارید):
1. حمید قبلاً دستور پختهایش را در کانال `@hamid_ashpazbashi2` به اشتراک میگذاشته. حال، نام کاربری کانالش را به `@hamid_ashpazbashi` تغییر داده است. او اکنون میخواهد همهی `@hamid_ashpazbashi2`های موجود در متن دستور پختها (ستون `recipe` جدول `foods`) را به `@hamid_ashpazbashi` تغییر دهد. این کوئری را برای او بنویسید.
2. شناسه، عنوان، میانگین امتیازات و تعداد آرای ۱۰ غذای برتر را برگردانید (ابتدا برحسب میانگین امتیازات بهصورت نزولی، سپس برحسب تعداد آرا بهصورت نزولی و سپس برحسب شناسهی غذا بهصورت نزولی). میانگین امتیازات را در قالب ستونی با نام `rating` و تعداد آرا را در قالب ستونی با نام `rate_count` برگردانید. اگر امتیازی به یکی از غذاهای موجود در نتیجه داده نشده بود، مقدار ستونهای `rating` و `rate_count` باید صفر باشد.
3. محتویات جدول غذاها را بههمراه ستون جدیدی با نام `total_price` برگردانید. مقدار این ستون باید برابر با جمع حاصلضرب قیمت واحد مواد اولیهی هر غذا در تعدادشان باشد. اگر مادهی اولیهای برای غذا ثبت نشده بود، مقدار این ستون باید صفر باشد.
4. شناسهی غذاهایی که کاربر با نام کاربری `quera` با استفاده از مواد اولیهش میتواند بپزد را در قالب ستونی با نام `id` برگردانید. نتایج باید بهترتیب نزولی شناسهی غذاها باشند. اگر مادهی اولیهای برای یک غذا ثبت نشده باشد، این غذا **نباید** در نتیجه وجود داشته باشد.
# آنچه باید آپلود کنید
کد خود را در قالب زیر، در یک فایل با پسوند `sql` قرار داده و آن را ارسال کنید.
```sql
-- Section1
your 1st query here
-- Section2
your 2nd query here
-- Section3
your 3rd query here
-- Section4
your 4th query here
```