|
|
|
| Напишу своими словами так как не знаю MySQL синтаксис ..
есть 2 табл
таб (1) дата ,еда
таб (2) дата ,еда ,кол, пользователь
нада выбрать с 2 таблиц 'Дата', 'еда','количество'
присоденить таб (1) левым соединением таб (2) по реквизитам 'дата' ,'еда'
и отборы
таб (1)
в интервале дат д1 и д2
таб(2)
отбор по пользователю
помогите... | |
|
|
|
|
автор: вред (16.06.2010 в 10:55) |
|
|
для: Арфей
(16.06.2010 в 10:32)
| |
SELECT таб1.дата, таб1.еда, таб2.кол
FROM таб1 LEFT JOIN таб2 ON таб1.дата=таб2.дата AND таб1.еда=таб2.еда
|
С "отборами" не понятно, эти условия должны применяться одновременно для одной выборки или это 2 разных запроса?
WHERE таб1.дата BETWEEN "2010-05-25" AND "2010-06-16"
|
WHERE таб2.пользователь = "Арфей"
|
| |
|
|
|
|
|
|
|
для: вред
(16.06.2010 в 10:55)
| | таб1 (отбор по периоду происходит) соеденияеться левым соед с таб2 (в это время в таб2 отбор строк по польз) выводит с 2 и 1табл .. Дата, еда, и кол (со 2 таб кол) если во втор 2 таб таких строк не нашло .. то кол 0
по ходу одновременно все отборы | |
|
|
|
|
|
|
|
для: Арфей
(16.06.2010 в 11:01)
| | предположу что пишеться так =)
SELECT таб1.дата, таб1.еда, таб2.кол
FROM таб1 WHERE таб1.дата BETWEEN "2010-05-25" AND "2010-06-16" LEFT JOIN таб2 ON таб1.дата=таб2.дата AND таб1.еда=таб2.еда WHERE таб2.пользователь = "Арфей" | |
|
|
|
|
автор: вред (16.06.2010 в 11:28) |
|
|
для: Арфей
(16.06.2010 в 11:06)
| | Ну почти...
SELECT таб1.дата, таб1.еда, COALESCE(таб2.кол, 0) AS кол
FROM таб1 LEFT JOIN таб2 ON таб1.дата=таб2.дата AND таб1.еда=таб2.еда
WHERE
таб1.дата BETWEEN "2010-05-25" AND "2010-06-16"
AND
таб2.пользователь = "Арфей"
|
| |
|
|
|
|
|
|
|
для: вред
(16.06.2010 в 11:28)
| | спасиба =) | |
|
|
|
|
|
|
|
для: Арфей
(16.06.2010 в 11:34)
| | Не получаеться =(
$query = "SELECT food.Date, food.Food, food_menue.number
FROM food LEFT JOIN food_menue ON food.Date=food_menue.Date AND food.Food=food_menue.Food WHERE food.Date BETWEEN DATE('" . $dt_from . "') AND ('" . $dt_to . "') AND food_menue.User_id = '0' order by food.Date";
|
если в таб1 есть записи а в таб2 нету то оно невыводит ничего | |
|
|
|
|
|
|
|
для: Арфей
(16.06.2010 в 11:57)
| | Какие к чертям таб1 и таб2 , когда у Вас в запросе food и food_menue?
Почему Вы меняете термины посреди диалога?! | |
|
|
|
|
|
|
|
для: Trianon
(16.06.2010 в 12:06)
| | food - это таблица 1
а food_menue таблица 2 ..
да я поменял термины .. небуду ж я таб1 и таб2 в коде реальном писать) | |
|
|
|
|
|
|
|
для: Арфей
(16.06.2010 в 12:08)
| | Вы могли сразу бы не быть писать дурацкие алиасы таб1 и таб2 в исходном условии, а изложить вопрос с реальными именами.
Либо остаться в рамках исходного именования до конца.
Левое соединение у Вас оказывается пустым потому, что в разделе WHERE имеются ссылки на элементы правой (по соединению) таблицы.
Очевидно, их стоит перенести в раздел ON условия соединения. | |
|
|
|
|
автор: вред (16.06.2010 в 12:07) |
|
|
для: Арфей
(16.06.2010 в 11:57)
| |
AND food_menue.User_id = '0'
|
Это реальный пользователь с id=0? Если да, то это логично, ведь сравнениваемое значение пользователя берётся из 2ой таблицы, а в ней соответствующие записи отсутствуют и все поля равны NULL.
Что по смыслу должен выводить этот запрос? | |
|
|
|
|
|
|
|
для: вред
(16.06.2010 в 12:07)
| | должен выводить записи в таб1 отобраные по интервалу дат ... и дополнительно если есть по левому соединению в таб2 схожие строки то еще и кол с таб2 .. если нету строк в таб 2 то таб1 и всё .. | |
|
|
|
|
автор: вред (16.06.2010 в 12:18) |
|
|
для: Арфей
(16.06.2010 в 12:11)
| | Я про пользователя. Должны присоединяться только "схожие" строки от конкретного пользователя? (при наличии таких строк)
Возможно, нужно связывание полей `Usar_id` и `User_id` из структур таблиц в предыдущей теме? | |
|
|
|
|
|
|
|
для: вред
(16.06.2010 в 12:07)
| | я понял изза этого AND .. а как зделать чтоб отбор по пользователю применялся тока на таб 2 ?? | |
|
|
|
|
автор: вред (16.06.2010 в 12:27) |
|
|
для: Арфей
(16.06.2010 в 12:12)
| | Отбор и применяется только на присоединённую таблицу. И если в этой таблице значения нет, а условие на значение есть, то вся строка в результирующую выборку не попадёт.
Пытаясь угадать, возможно так...
AND (food_menue.User_id IS NULL OR food_menue.User_id = '0')
|
| |
|
|
|
|
|
|
|
для: вред
(16.06.2010 в 12:27)
| | классс =) СПАСИБА=) | |
|
|
|