Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с запросом ... MySQL
 
 автор: Арфей   (16.06.2010 в 10:32)   письмо автору
 
 

Напишу своими словами так как не знаю 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 в 11:01)   письмо автору
 
   для: вред   (16.06.2010 в 10:55)
 

таб1 (отбор по периоду происходит) соеденияеться левым соед с таб2 (в это время в таб2 отбор строк по польз) выводит с 2 и 1табл .. Дата, еда, и кол (со 2 таб кол) если во втор 2 таб таких строк не нашло .. то кол 0

по ходу одновременно все отборы

  Ответить  
 
 автор: Арфей   (16.06.2010 в 11:06)   письмо автору
 
   для: Арфей   (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:34)   письмо автору
 
   для: вред   (16.06.2010 в 11:28)
 

спасиба =)

  Ответить  
 
 автор: Арфей   (16.06.2010 в 11:57)   письмо автору
 
   для: Арфей   (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 нету то оно невыводит ничего

  Ответить  
 
 автор: Trianon   (16.06.2010 в 12:06)   письмо автору
 
   для: Арфей   (16.06.2010 в 11:57)
 

Какие к чертям таб1 и таб2 , когда у Вас в запросе food и food_menue?
Почему Вы меняете термины посреди диалога?!

  Ответить  
 
 автор: Арфей   (16.06.2010 в 12:08)   письмо автору
 
   для: Trianon   (16.06.2010 в 12:06)
 

food - это таблица 1
а food_menue таблица 2 ..

да я поменял термины .. небуду ж я таб1 и таб2 в коде реальном писать)

  Ответить  
 
 автор: Trianon   (16.06.2010 в 12:17)   письмо автору
 
   для: Арфей   (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:11)   письмо автору
 
   для: вред   (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:12)   письмо автору
 
   для: вред   (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:36)   письмо автору
 
   для: вред   (16.06.2010 в 12:27)
 

классс =) СПАСИБА=)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования