Всем доброго дня!
Мне нужна помощь, не могу правильно сформировать запрос.
Я использую SQLite.
У меня есть 3 таблицы: меню, заказы и пользователи
CREATE TABLE IF NOT EXISTS "menu" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"date" DATE NOT NULL,
"title" VARCHAR NOT NULL,
"price" REAL NOT NULL);
CREATE TABLE IF NOT EXISTS "user" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" VARCHAR NOT NULL,
"ip" VARCHAR NOT NULL );
CREATE TABLE IF NOT EXISTS "ordered" (
"menu_id" INTEGER,
"user_id" INTEGER,
"col" INTEGER,
"date_order" DATE,
FOREIGN KEY ("menu_id") REFERENCES "menu"("id"),
FOREIGN KEY ("user_id") REFERENCES "user"("id"));
CREATE INDEX IF NOT EXISTS "inDate" ON "menu" ("date");
Задача такова: нужно построить таблицу, которая бы выводила заказы на текущий(выбранный) день для конкретного пользователя.
Формат таблицы должен быть примерно такой "| title | price | col |", очень важно выводить как существующие записи из таблицы "ordered" так и не существующие
Вот пример того как должно быть:
№ Блюдо Цена Количество
1 Окрошка 8 1
2 Суп с фрикадельками 7 1
3 Говядина в грибном соусе9 1
4 Зразы с грибами 7 1
5 Курица по домашнему 9 1
6 Курица с помидорами 6.5 1
7 Отбивная мясная 9 1
8 Плов с курицей 11.5 0
9 Свинина по запорожски 10.5 0
10 Котлета рыбная 9 0
11 Рыба "Версаль" 13 0
12 Рыба по-русски 15 0
13 Гречка 1.5 0
14 Картофель отварной 2.5 0
15 Каша пшеничная 1.5 0
16 Цветная капуста 3 0
17 Салат "Будапешт" 8 0
18 Салат "Деревенский" 3.5 0
19 Салат Свежие помидоры 2.5 0
20 Салат Капуста свежая 2 0
21 Салат Пикантный 4.5 0
22 Салат Радуга 3.75 0
23 Запеканка творожная 3.6 0
Это все счастье на выбор для пользлвателя по id=2, который у меня именуется как Валерий и на дату 2009-08-29
Вот запрос который я использую
SELECT menu.title, menu.price, ordered.col
FROM menu
LEFT JOIN ordered
ON menu.id=ordered.menu_id
WHERE ( ordered.user_id=? OR ordered.user_id IS NULL ) AND menu.date=?
Знаки "?" это подставляемые значения
Беда в том что что если на эту же дату (2009-08-29) выводить заказы для другого пользователя, то отсекаются строки с блюдами которые заказаны у пользователя с id=2
Вот что получается, плохо получается
№ Блюдо Цена Количество
1 Плов с курицей 11.5 0
2 Свинина по запорожски 10.5 0
3 Котлета рыбная 9 0
4 Рыба "Версаль" 13 0
5 Рыба по-русски 15 0
6 Гречка 1.5 0
7 Картофель отварной 2.5 0
8 Каша пшеничная 1.5 0
9 Цветная капуста 3 0
10 Салат "Будапешт" 8 0
11 Салат "Деревенский" 3.5 0
12 Салат "Свежие помидоры 2.5 0
13 Салат Капуста свежая 2 0
14 Салат Пикантный 4.5 0
15 Салат Радуга 3.75 0
16 Запеканка творожная 3.6 0
Выводятся все только нулевые значения, да еще и не полный прейскурант, что не очень хорошо.
Должно быть 23 блюда, а не 16
Еще был запрос такого плана
SELECT user.id, menu.title, menu.price, ordered.col
FROM user, menu LEFT JOIN ordered ON (menu.id = ordered.menu_id)
WHERE user.id = ? AND ordered.user_id = user.id AND menu.date = ?
Запрос лабуда.
Может быть имеет смысл использовать подзапросы? Я пока не сильно разобрался в подзапросах.
Буду весьма благодарен если кто поможет решить задачу