Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Упрощу структуру, чтобы не путаться в специфике базы: Есть таблица master m и detail d. Нужно вывести запрос строк из master + значение, говорящее о том, что для master СУЩЕСТВУЮТ значения в detail-таблице, и при этом дата окончания ни в одном из них непустая. Сейчас запрос выглядит следующим образом: авторSELECT m.*, (IF ((d_ex.id IS NOT NULL) AND (d_nul.id IS NULL), 'Y', 'N')) AS all_finished // lдетайлы существуют и нет незавершенных FROM master m LEFT JOIN detail d_ex ON d_ex.master_id = m.id // существование детайлов LEFT JOIN detail d_nul ON (d_nul.master_id = m.id) AND ((d_nul.finish_time = '1899-12-30') OR (d_nul.finish_time IS NULL)) // присутствие незавершенных среди существующих Однако выполняется он очень долго - 14 секунд. Как только закомментируешь хотя бы один из этих джойнов, скорость возрастает до 2 секунд. Но как тогда вместить все в один джойн, если это противоположные требования? В первом надо определить существование, а во втором - несуществование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 11:53 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Упрощу структуру, чтобы не путаться в специфике базы: Есть таблица master m и detail d. Нужно вывести запрос строк из master + значение, говорящее о том, что для master СУЩЕСТВУЮТ значения в detail-таблице, и при этом дата окончания ни в одном из них непустая. Сейчас запрос выглядит следующим образом: Код: sql 1. 2. 3. 4. Однако выполняется он очень долго - 14 секунд. Как только закомментируешь хотя бы один из этих джойнов, скорость возрастает до 2 секунд. Но как тогда вместить все в один джойн, если это противоположные требования? В первом надо определить существование, а во втором - несуществование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 11:58 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
svnvladЕсть таблица master m и detail d. Нужно вывести запрос строк из master + значение, говорящее о том, что для master СУЩЕСТВУЮТ значения в detail-таблице, и при этом дата окончания ни в одном из них непустая. Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 12:08 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Одно плохо - значения-признаки будут дублироваться в каждой записи... некошерно... почему не получить их вторым запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 12:09 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
А, да... GROUP BY m.id либо просто DISTINCT добавь. А то для тех записей, для которых есть соответствия более одного, вылезут дубли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 12:11 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
AkinaА, да... GROUP BY m.id либо просто DISTINCT добавь. А то для тех записей, для которых есть соответствия более одного, вылезут дубли. Да, там есть, я просто забыл здесь написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 12:16 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
AkinaОдно плохо - значения-признаки будут дублироваться в каждой записи... некошерно... почему не получить их вторым запросом? Это сообщение не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 14:41 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
AkinasvnvladЕсть таблица master m и detail d. Нужно вывести запрос строк из master + значение, говорящее о том, что для master СУЩЕСТВУЮТ значения в detail-таблице, и при этом дата окончания ни в одном из них непустая. Код: sql 1. 2. 3. 4. 5. Если первое верно MAX(d.master_id) IS NULL DetailsNotExist, то второе MAX(d.finish_time) > '1899-12-30' NullsNotExist не дает правильного результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 14:54 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
svnvladMAX(d.finish_time) > '1899-12-30' NullsNotExist не дает правильного результата. Да, точно. Замени на Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 15:09 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
EMS MySQL Manager странно работает. Вношу с его помощью в дату значение '1899-30-12 00:00:00', он превращает его в 0000-00-00 00:00:00', соответственно, запрос его не находит как WHERE finish_time = '1899-12-30', однако, находит как WHERE finish_time = 0. С другой стороны, в базе реально есть значения "1899-12-30 00:00:00", и их он находит как WHERE finish_time = '1899-12-30'. Получается на нулевое значение даты надо проверять по 3-м признакам? 1. NULL 2. 1899-12-30 3. 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 15:10 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Akina, а вот так тоже нормально? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 15:16 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
svnvladа вот так тоже нормально?Нет. Коррелированный подзапрос скорее всего снизит скорость выполнения. SUM(условие1 OR условие2 OR ...) скорее всего будет быстрее. svnvladEMS MySQL Manager странно работает. Вношу с его помощью в дату значение '1899-30-12 00:00:00', он превращает его в 0000-00-00 00:00:00' https://dev.mysql.com/doc/refman/5.7/en/datetime.html Invalid DATE, DATETIME, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00' or '0000-00-00 00:00:00'). Опять же смотрим SQL Modes. И эта... какой точно тип данных у поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 15:40 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Akina, тип DATETIME. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 16:29 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Немного усложним задачу. На самом деле в таблице detail не одна ссылка master_id, а две. from_master_id и to_master_id. Заполняется только одна из них, либо from_master_id, либо to_master_id. Соответственно, другая будет Null. И тут у меня возникают трудности, как данный запрос адаптировать к этой системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 16:31 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Вроде бы решил Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 16:54 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
svnvladтип DATETIME. https://dev.mysql.com/doc/refman/5.7/en/datetime.html The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. Так что '1899-30-12 00:00:00' - вполне себе легитимное значение для этого типа поля. А наблюдаемая проблема - хороший повод деинсталлировать глючный софт и перейти на нечто более вменяемое. svnvladНа самом деле в таблице detail не одна ссылка master_id, а две. from_master_id и to_master_id. Заполняется только одна из них, либо from_master_id, либо to_master_id. Соответственно, другая будет Null.Ну привязывай две копии и используй COALESCE для выбора Not-NULL значения из двух. Делов-то... впрочем, что бы с учётом этого бреда не подумать об изменении структурки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 16:54 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Akinasvnvladтип DATETIME. https://dev.mysql.com/doc/refman/5.7/en/datetime.html The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. Так что '1899-30-12 00:00:00' - вполне себе легитимное значение для этого типа поля. А наблюдаемая проблема - хороший повод деинсталлировать глючный софт и перейти на нечто более вменяемое. Да он еще при добавлении или изменении записей в таблицы, даже если фиксируешь транзакцию, в упор не видит изменений, пока не отсоединишься от базы и не присоединишься вновь. А какой софт не глючный, конкурентоспособный по сравнению с EMS? svnvladНа самом деле в таблице detail не одна ссылка master_id, а две. from_master_id и to_master_id. Заполняется только одна из них, либо from_master_id, либо to_master_id. Соответственно, другая будет Null.Ну привязывай две копии и используй COALESCE для выбора Not-NULL значения из двух. Делов-то... впрочем, что бы с учётом этого бреда не подумать об изменении структурки? Там выше, уже решил. По поводу структуры, тут master - это карточка груза (включает местоположение), а detail - это операции перегрузки, в ней отражается с какой карточки в какую груз был перегружен. Поэтому, собственно, сама карточка остается master-ом, а в detaile две ссылки - на карточку "откуда", и на карточку "куда". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 17:01 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
svnvladкакой софт не глючный, конкурентоспособный по сравнению с EMS?А это от необходимого функционала зависит. Но со штатными консолью и воркбенчем такой хни, как ты рассказываешь, точно не бывает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 19:28 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
svnvladdetail - это операции перегрузки, в ней отражается с какой карточки в какую груз был перегружен.Избыточно и потенциально противоречиво. Достаточно информации, куда. А откуда - определяется уже имеющимися данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 19:29 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
AkinaТак что '1899-30-12 00:00:00' - вполне себе легитимное значение для этого типа поля.Не понял, почему? 30 месяц не бывает же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 20:06 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
miksoftпочему? 30 месяц не бывает же?Блин, даже не посмотрел... вначале ж везде '1899-12-30' было... раз проверил и забыл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 20:17 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
Akinasvnvladdetail - это операции перегрузки, в ней отражается с какой карточки в какую груз был перегружен.Избыточно и потенциально противоречиво. Достаточно информации, куда. А откуда - определяется уже имеющимися данными. А как отобразить такой процесс? Приехало 10 автомобилей с грузом. Каждая партия этого груза - это отдельная карточка. В данном случае на одном автомобиле одна карточка груза. Включает в себя номер договора, вес, условия перевозки, ссылка на автомобиль. Эти 10 авто разгружают на склад №1 в одну кучу, формируя таким образом новую карточку - карточку груза склада. Она включает номер договора, вес (в ней уже суммированные веса всех 10 партий), № склада. В существующей схеме в таблице transshipment имеется ссылка from_cargo_card_id и to_cargo_card_id. Соответственно в ней сформируется 10 строк, отражающих историю всех перегрузок, их продолжительность, ответственного и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 13:59 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
А еще один автомобиль могут разгружать не единоразово, а в 2 смены. В transshipment сформируется тогда 2 записи, отражающие историю всей перегрузки. А если просто в карточке делать ссылку "куда", то 2 операции не отобразить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 14:03 |
|
||
|
Помогите составить запрос
|
|||
|---|---|---|---|
|
#18+
И еще теоретически могут карточку одного автомобиля разгрузить частично на один склад, частично на другой, т.е. в 2 разных карточки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 14:07 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39611833&tid=1830007]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 17ms |
| total: | 156ms |

| 0 / 0 |
