Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL помогите с запросом

Модерирует : Cheery

articlebot (31-01-2018 20:08): MySQL Помогите составить запрос  Версия для печати • ПодписатьсяДобавить в закладки

   

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день уважаемые форумчане, помогите изменить запрос.  
Требуется возвращать все записи из таблицы "TRADE" где "TRADE.ACTIVE = 1", мой запрос
не возвращает те записи где ORDER.DATES < '2017-11-26'. Это конечно логично, но как
одним запросом реализовать задуманное?
 

Код:
 
SELECT
   SUM(ORDER.PRICE) AS CREDIT,
   TRADE.ORDER,
   TRADE.PRICE,
   TRADE.DRIVER,
   TRADE.CAR,
   DRIVERS.ID,
   DRIVERS.FIO,
   DRIVERS.MOBILE1,
   DRIVERS.MOBILE2,
   DRIVERS.ACTIVE,
   CARS.NAME,
   CARS.MODEL,
   CARS.NUMBER,
   CARS.COLOR
FROM `TRADE`, `DRIVERS`, `CARS`, `ORDER`
WHERE
   DRIVERS.ID = TRADE.DRIVER AND
   CARS.ID = TRADE.CAR AND
   ORDER.UID = TRADE.ORDER AND
   ORDER.DATES < '2017-11-26' AND
   ORDER.PAID < 1 AND
   ORDER.PRICE <> 'Выходной' AND
   TRADE.ACTIVE = '1'
GROUP BY TRADE.DRIVER ORDER BY DRIVERS.FIO
 

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 05:50 26-11-2017 | Исправлено: koreets2011, 05:51 26-11-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
MySQL Помогите составить запрос !!!
вопрос внятно формулируйте.  
получить из TRADE с одним условием и дополнить его данными из ORDER если там дата меньше какой то?
для этого нужно использовать LEFT JOIN
если речь не об этом, то формулируйте внятно вопрос

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 06:00 26-11-2017
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii все верно, спасибо!!!

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 06:13 26-11-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Код:
SELECT  
   SUM(ORDER.PRICE) AS CREDIT,  
   TRADE.ORDER,  
   TRADE.PRICE,  
   TRADE.DRIVER,  
   TRADE.CAR,  
   DRIVERS.ID,  
   DRIVERS.FIO,  
   DRIVERS.MOBILE1,  
   DRIVERS.MOBILE2,  
   DRIVERS.ACTIVE,  
   CARS.NAME,  
   CARS.MODEL,  
   CARS.NUMBER,  
   CARS.COLOR  
FROM `TRADE`
LEFT JOIN DRIVERS ON DRIVERS.ID = TRADE.DRIVER
LEFT JOIN CARS ON CARS.ID = TRADE.CAR
LEFT JOIN ORDERS ON ORDER.UID = TRADE.ORDER AND
   ORDER.DATES < '2017-11-26' AND
   ORDER.PAID < 1 AND  
   ORDER.PRICE <> 'Выходной'
WHERE  
   TRADE.ACTIVE = '1'  
GROUP BY TRADE.DRIVER
ORDER BY DRIVERS.FIO

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 06:44 26-11-2017
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Получаю ошибку
 

Код:
 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER ON ORDER.UID = TRADE.ORDER AND ORDER.DATES < '2017-11-26' AND ORDE' at line 19
 

 
Все разобрался, кавычки упустил.
Спасибо огромное за помощь.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 06:49 26-11-2017 | Исправлено: koreets2011, 06:52 26-11-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
я лишь показал идею, не проверяя

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 06:53 26-11-2017 | Исправлено: Mavrikii, 06:54 26-11-2017
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Туплю сегодня  
Есть две таблицы одинакового формата:
CREATE TABLE `one` (
`num` int(11) NOT NULL, // измерение
`left` bigint(20) NOT NULL, // левая граница отрезка
`right` bigint(20) NOT NULL, // правая граница отрезка
`count` int(11) NOT NULL, / число отрезков
UNIQUE KEY `num_left_right` (`num`, `left`, `right`)); // не может быть двух записей с одинаковым набором (num,left,right)
 
CREATE TABLE `two` (
`num` int(11) NOT NULL,
`left` bigint(20) NOT NULL,
`right` bigint(20) NOT NULL,
`count` int(11) NOT NULL,
UNIQUE KEY `num_left_right` (`num`, `left`, `right`));
 
 
Хочется создать таблицу three:
CREATE TABLE `three` (
`num` int(11) NOT NULL,
`left` bigint(20) NOT NULL,
`right` bigint(20) NOT NULL,
`count1` int(11) NOT NULL,
`count2` int(11) NOT NULL,
UNIQUE KEY `num_left_right` (`num`, `left`, `right`));
 
являющейся суммой этих двух таблиц, т.е. если в двух таблицах встретились два одинаковых отрезка в одном измерении, например:
 
{num, left, right, count}  (4, 112, 234, 2) + (4, 112, 234, 7) то результатом будет {num, left, right, count1, count2} (4, 112, 234, 2, 7)
а если отрезок есть только в первой таблице, то результатом должен быть обнуленный count2:  
(4, 112, 234, 2) + (нет таких данных) => (4, 112, 234, 2, 0)
 
На мой взгляд, должно быть что-то вроде:
 
insert into `three` (`num`, `left`, `right`, `count1`)  
select num, left, right, count as count1  from one order by `num`;
insert into `three` (`num`, `left`, `right`, `count2`)  
select `num`, `left`, `right`, `count` as `count2`  from `two` order by `num`
on duplicate key update `three`.`count2` = `two`.`count`;
 
Я прав или где-то напутал?

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 15:28 31-01-2018 | Исправлено: vicontfreetime, 15:29 31-01-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vicontfreetime
проще сделать одним запросом.
 
insert into three
select one.*, two.count from one
left join two on two.num = one.num and two.left = one.left and two.right = one.right
order by one.num
 
если второго нет, то two.count будет NULL, если нужно преобразовать в число, то это несложно через if
select one.*, IFNULL(two.count, 0) ...
 
и есть же тема - MySQL Помогите составить запрос, зачем поднимать пустышку?

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 18:34 31-01-2018 | Исправлено: Mavrikii, 18:35 31-01-2018
vicontfreetime

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо!
А тему не заметил, каюсь, решил, что это я один плохо плаваю в SQL

Всего записей: 377 | Зарегистр. 22-04-2002 | Отправлено: 19:17 31-01-2018
   

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL помогите с запросом
articlebot (31-01-2018 20:08): MySQL Помогите составить запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru