SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.06.2010 12:18:23

Arfey
Участник
Зарегистрирован: 02.06.2010
Сообщений: 15

Помогите с запросом ...

Доброе утро

Незнаю как написать такой запрос ..

Есть первая таблица в ней 2 колонки (дата и еда ) к примеру
(1 табл)
18.06.2010 Молоко
18.06.2010 Хлеб
18.06.2010 Курица
19.06.2010 Жаркое
19.06.2010 (итд)
19.06.2010

с нее по интервалу дат ( с и по) выбираем первых 5 дат (тоесть нада както строки с датами сгрупировать)

а потом есть (2 таблица)

в ней тоже самое  что и с первой .. но сложность в том чтоб не находить во 2 таблице даты которые нашли в первой ..

и в результате вывести списки с первыми 5 датами по 2 таблицам

помогите ..

Неактивен

 

#2 15.06.2010 13:26:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с запросом ...

select `дата`, group_concat(еда) from (select * from table1 where `дата` between X and Y
union
select * from table2 `дата` between X and Y)t
group by `дата` desc limit 5;

Неактивен

 

#3 15.06.2010 13:32:25

Arfey
Участник
Зарегистрирован: 02.06.2010
Сообщений: 15

Re: Помогите с запросом ...

vasya написал:

select `дата`, group_concat(еда) from (select * from table1 where `дата` between X and Y
union
select * from table2 `дата` between X and Y)t
group by `дата` desc limit 5;

а что такое "t" ?

тут к томуже мне кажеться но даты из 1 таблице во второй не исключаються .. (могу быть не прав)

Отредактированно Arfey (15.06.2010 13:40:33)

Неактивен

 

#4 15.06.2010 13:39:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с запросом ...

Имя для таблицы построенной на объединении нужных строк из двух таблиц

(select * from table1 where `дата` between X and Y
union
select * from table2 `дата` between X and Y)

Неактивен

 

#5 15.06.2010 13:57:40

Arfey
Участник
Зарегистрирован: 02.06.2010
Сообщений: 15

Re: Помогите с запросом ...

$query = "SELECT `Date`, group_concat(`Food`), `number` from (select * from `food` where `Date` between DATE(`".$dt_from."`) and DATE(`".$dt_to."`)
union select * from `food_menue` `Date` between DATE(`".$dt_from."`) and DATE(`".$dt_to."`))t group by `Date` desc limit 5";
   
типа так написал .. сча буду тестить

Отредактированно Arfey (15.06.2010 13:59:58)

Неактивен

 

#6 15.06.2010 14:14:41

Arfey
Участник
Зарегистрирован: 02.06.2010
Сообщений: 15

Re: Помогите с запросом ...

vasya написал:

Имя для таблицы построенной на объединении нужных строк из двух таблиц

(select * from table1 where `дата` between X and Y
union
select * from table2 `дата` between X and Y)

оно тут обеденяет строки .. похожии но ситуация чуть не такая ..

в table1 если находит дату то в table2  оно не должно её искать ..

Неактивен

 

#7 15.06.2010 14:14:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с запросом ...

Обратные кавычки для аргумента функции date() не нужны.
Когда вы заключаете что-то в обратные кавычки, то это означает, что данное что-то не ключевое слово или значение, или имя функции, а алиас (т.е. имя столбца/таблицы/базы данных в зависимости от контекста). А так как столбца одноименного введенной вами дате нет, то вы получите ошибку.

test >select date(now());
+-------------+
| date(now()) |
+-------------+
| 2010-06-15  |
+-------------+
1 row in set (0.09 sec)

test >select date(`now()`);
ERROR 1054 (42S22): Unknown column 'now()' in 'field list'
 


Кроме того where во втором селекте пропустили.

Неактивен

 

#8 15.06.2010 14:46:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с запросом ...

Arfey написал:

оно тут обеденяет строки .. похожии но ситуация чуть не такая ..

в table1 если находит дату то в table2  оно не должно её искать ..

А вам точно это нужно именно одним запросом? Я конечно напишу "матерную конструкцию" из любви к искусству, но если вы это используете в проекте, то именно такие конструкции, только не на sql, а на великом и могучем вы услышите


select `дата`, `еда` from table1 where `дата` in(select `дата` from(
select `дата` from table1 union select `дата` from table2 order by `дата` desc limit 5)x)
union
select `дата`,`еда` from table2 where `дата` in(
select `дата` from (select `дата` from table1 union select `дата` from table2 order by `дата` desc limit 5)t2 left join (
select `дата`, `еда` from table1 where `дата` in(select `дата` from(
select `дата` from table1 union select `дата` from table2 order by `дата` desc limit 5)t))t1
using(`дата`) where `еда` is null) order by `дата`;


UPD: Ещё битвины дописать нужно wink

Неактивен

 

#9 15.06.2010 15:04:54

Arfey
Участник
Зарегистрирован: 02.06.2010
Сообщений: 15

Re: Помогите с запросом ...

vasya написал:

Arfey написал:

оно тут обеденяет строки .. похожии но ситуация чуть не такая ..

в table1 если находит дату то в table2  оно не должно её искать ..

А вам точно это нужно именно одним запросом? Я конечно напишу "матерную конструкцию" из любви к искусству, но если вы это используете в проекте, то именно такие конструкции, только не на sql, а на великом и могучем вы услышите


select `дата`, `еда` from table1 where `дата` in(select `дата` from(
select `дата` from table1 union select `дата` from table2 order by `дата` desc limit 5)x)
union
select `дата`,`еда` from table2 where `дата` in(
select `дата` from (select `дата` from table1 union select `дата` from table2 order by `дата` desc limit 5)t2 left join (
select `дата`, `еда` from table1 where `дата` in(select `дата` from(
select `дата` from table1 union select `дата` from table2 order by `дата` desc limit 5)t))t1
using(`дата`) where `еда` is null) order by `дата`;


UPD: Ещё битвины дописать нужно wink

smile блин я такое .. на 1С пишу .. с одной стороны как бы понятно с другой нет

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson