Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN и проблемы при сортировки / 10 сообщений из 10, страница 1 из 1
30.01.2019, 14:04
    #39767021
KobaLTD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
делаю так
Код: sql
1.
2.
3.
SELECT a.*, b.name FROM vs_my_player_team as a 
LEFT JOIN vs_my_team_name as b on a.tid=b.tid and a.begin_date >= b.begin_date and a.end_date <=if(b.end_date='0000-00-00','2020-12-31',b.end_date)
where a.pid=6;



все замечательно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number | name                                        |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+
| 3576 |   6 |   5 |           | 2012-00-00 | 2013-00-00 |      3 |      1 | "Искра" Одинцово                            |
| 4183 |   6 |  27 |           | 2013-00-00 | 2014-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |
| 4414 |   6 |  27 |           | 2014-00-00 | 2014-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |
|  700 |   6 |  11 |           | 2008-00-00 | 2010-00-00 |      3 |     10 | "Урал" Уфа                                  |
| 4313 |   6 |  11 |           | 2014-00-00 | 2014-00-00 |      3 |     11 | "Урал" Уфа                                  |
| 4435 |   6 |  11 |           | 2014-00-00 | 2015-00-00 |      3 |     11 | "Урал" Уфа                                  |
| 2735 |   6 |  12 |           | 2010-00-00 | 2012-00-00 |      3 |      1 | "Ярославич" Ярославль                       |
| 4998 |   6 |  45 |           | 2015-00-00 | 2016-00-00 |      3 |     18 | "Динамо" Краснодар                          |
|   34 |   6 |   1 |           | 2000-00-00 | 2008-00-00 |      3 |      1 | NULL                                        |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+
9 rows in set, 18 warnings (0.00 sec)

2) делаем так
делаю так
Код: sql
1.
SELECT a.* FROM vs_my_player_team as a where a.pid=6 ORDER BY a.begin_date;



тоже все в порядке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
+------+-----+-----+-----------+------------+------------+--------+--------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number |
+------+-----+-----+-----------+------------+------------+--------+--------+
|   34 |   6 |   1 |           | 2000-00-00 | 2008-00-00 |      3 |      1 |
|  700 |   6 |  11 |           | 2008-00-00 | 2010-00-00 |      3 |     10 |
| 2735 |   6 |  12 |           | 2010-00-00 | 2012-00-00 |      3 |      1 |
| 3576 |   6 |   5 |           | 2012-00-00 | 2013-00-00 |      3 |      1 |
| 4183 |   6 |  27 |           | 2013-00-00 | 2014-00-00 |      3 |      7 |
| 4313 |   6 |  11 |           | 2014-00-00 | 2014-00-00 |      3 |     11 |
| 4414 |   6 |  27 |           | 2014-00-00 | 2014-00-00 |      3 |      7 |
| 4435 |   6 |  11 |           | 2014-00-00 | 2015-00-00 |      3 |     11 |
| 4998 |   6 |  45 |           | 2015-00-00 | 2016-00-00 |      3 |     18 |
+------+-----+-----+-----------+------------+------------+--------+--------+


но стоит сделать так

Код: sql
1.
2.
3.
SELECT a.*, b.name FROM vs_my_player_team as a 
LEFT JOIN vs_my_team_name as b on a.tid=b.tid and a.begin_date >= b.begin_date and a.end_date <=if(b.end_date='0000-00-00','2020-12-31',b.end_date)
where a.pid=6 ORDER BY a.begin_date;



и обнуляются даты и нет сортировки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number | name                                        |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+
| 3576 |   6 |   5 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | "Искра" Одинцово                            |
|   34 |   6 |   1 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | NULL                                        |
|  700 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     10 | "Урал" Уфа                                  |
| 2735 |   6 |  12 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | "Ярославич" Ярославль                       |
| 4183 |   6 |  27 |           | 0000-00-00 | 0000-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |
| 4313 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     11 | "Урал" Уфа                                  |
| 4998 |   6 |  45 |           | 0000-00-00 | 0000-00-00 |      3 |     18 | "Динамо" Краснодар                          |
| 4414 |   6 |  27 |           | 0000-00-00 | 0000-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |
| 4435 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     11 | "Урал" Уфа                                  |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+

версия mysql 5.7.24, тип begin_date - DATE, MyISAM

Подскажите что нибудь?
...
Рейтинг: 0 / 0
30.01.2019, 14:58
    #39767065
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
Покажите структуру и содержимое исходных таблиц.
...
Рейтинг: 0 / 0
30.01.2019, 15:28
    #39767109
KobaLTD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
Не знаю чем это поможет но вот

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
show fields from vs_my_player_team;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(11)          | NO   | PRI | NULL    | auto_increment |
| pid        | int(11) unsigned | NO   |     | NULL    |                |
| tid        | int(11) unsigned | NO   |     | NULL    |                |
| team_name  | char(255)        | NO   |     | NULL    |                |
| begin_date | date             | NO   |     | NULL    |                |
| end_date   | date             | NO   |     | NULL    |                |
| typeID     | int(11) unsigned | NO   |     | NULL    |                |
| number     | int(11)          | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

show fields from vs_my_team_name;
+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(11)          | NO   | PRI | NULL    | auto_increment |
| tid           | int(11) unsigned | NO   |     | NULL    |                |
| name          | char(64)         | NO   |     | NULL    |                |
| name_short    | char(32)         | NO   |     | NULL    |                |
| en_name       | char(64)         | NO   |     | NULL    |                |
| en_name_short | char(32)         | NO   |     | NULL    |                |
| begin_date    | date             | NO   |     | NULL    |                |
| end_date      | date             | NO   |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+


А "содержимого" слишком много чтобы выкладывать тут.
...
Рейтинг: 0 / 0
30.01.2019, 15:35
    #39767127
KobaLTD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
По данным выборка производиться правильно. Вопрос в том - почему при добавлении ORDER BY по ЛЮБОМУ столбцу приводит к "обнулению" значений даты?
...
Рейтинг: 0 / 0
30.01.2019, 15:47
    #39767141
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
KobaLTD,

Раз вы не показываете всех данных, то могу предположить, что при сортировке вперёд выезжают именно те записи, в которых дата нулевая.
...
Рейтинг: 0 / 0
30.01.2019, 15:49
    #39767146
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
Попробуйте без сортировки сложить результат в табличку, а потом сделать из нее select с сортировкой. Результат будет такой же?
...
Рейтинг: 0 / 0
30.01.2019, 15:56
    #39767157
KobaLTD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
Код: sql
1.
SELECT a.*, b.name,b.id FROM vs_my_player_team as a  LEFT JOIN vs_my_team_name as b on a.tid=b.tid and a.begin_date >= b.begin_date and a.end_date <=if(b.end_date='0000-00-00','2020-12-31',b.end_date) where a.pid=6;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number | name                                        | id   |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+
| 3576 |   6 |   5 |           | 2012-00-00 | 2013-00-00 |      3 |      1 | "Искра" Одинцово                            |   59 |
| 4183 |   6 |  27 |           | 2013-00-00 | 2014-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |   65 |
| 4414 |   6 |  27 |           | 2014-00-00 | 2014-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |   65 |
|  700 |   6 |  11 |           | 2008-00-00 | 2010-00-00 |      3 |     10 | "Урал" Уфа                                  |   89 |
| 4313 |   6 |  11 |           | 2014-00-00 | 2014-00-00 |      3 |     11 | "Урал" Уфа                                  |   89 |
| 4435 |   6 |  11 |           | 2014-00-00 | 2015-00-00 |      3 |     11 | "Урал" Уфа                                  |   89 |
| 2735 |   6 |  12 |           | 2010-00-00 | 2012-00-00 |      3 |      1 | "Ярославич" Ярославль                       |   99 |
| 4998 |   6 |  45 |           | 2015-00-00 | 2016-00-00 |      3 |     18 | "Динамо" Краснодар                          |  113 |
|   34 |   6 |   1 |           | 2000-00-00 | 2008-00-00 |      3 |      1 | NULL                                        | NULL |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+


Код: sql
1.
SELECT a.*, b.name,b.id FROM vs_my_player_team as a  LEFT JOIN vs_my_team_name as b on a.tid=b.tid and a.begin_date >= b.begin_date and a.end_date <=if(b.end_date='0000-00-00','2020-12-31',b.end_date) where a.pid=6 order by a.begin_date;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number | name                                        | id   |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+
| 2735 |   6 |  12 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | "Ярославич" Ярославль                       |   99 |
| 4183 |   6 |  27 |           | 0000-00-00 | 0000-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |   65 |
| 4313 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     11 | "Урал" Уфа                                  |   89 |
| 4998 |   6 |  45 |           | 0000-00-00 | 0000-00-00 |      3 |     18 | "Динамо" Краснодар                          |  113 |
| 4414 |   6 |  27 |           | 0000-00-00 | 0000-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |   65 |
| 4435 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     11 | "Урал" Уфа                                  |   89 |
| 3576 |   6 |   5 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | "Искра" Одинцово                            |   59 |
|   34 |   6 |   1 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | NULL                                        | NULL |
|  700 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     10 | "Урал" Уфа                                  |   89 |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+

как видите id записей из обеих таблиц ОДНИ И ТЕ ЖЕ и связи по LEFT JOIN установлены ОДНИ И ТЕЖЕ - как такое может быть ?

ладно вот вам данные

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT a.* FROM vs_my_player_team as a  where a.pid=6;                                                                                                                                 +------+-----+-----+-----------+------------+------------+--------+--------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number |
+------+-----+-----+-----------+------------+------------+--------+--------+
|   34 |   6 |   1 |           | 2000-00-00 | 2008-00-00 |      3 |      1 |
|  700 |   6 |  11 |           | 2008-00-00 | 2010-00-00 |      3 |     10 |
| 2735 |   6 |  12 |           | 2010-00-00 | 2012-00-00 |      3 |      1 |
| 3576 |   6 |   5 |           | 2012-00-00 | 2013-00-00 |      3 |      1 |
| 4183 |   6 |  27 |           | 2013-00-00 | 2014-00-00 |      3 |      7 |
| 4313 |   6 |  11 |           | 2014-00-00 | 2014-00-00 |      3 |     11 |
| 4414 |   6 |  27 |           | 2014-00-00 | 2014-00-00 |      3 |      7 |
| 4435 |   6 |  11 |           | 2014-00-00 | 2015-00-00 |      3 |     11 |
| 4998 |   6 |  45 |           | 2015-00-00 | 2016-00-00 |      3 |     18 |
+------+-----+-----+-----------+------------+------------+--------+--------+

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT b.* FROM vs_my_team_name as b where b.tid in (SELECT a.tid FROM vs_my_player_team as a  where a.pid=6);
+-----+-----+----------------------------------------------------------+-----------------------+---------+---------------+------------+------------+
| id  | tid | name                                                     | name_short            | en_name | en_name_short | begin_date | end_date   |
+-----+-----+----------------------------------------------------------+-----------------------+---------+---------------+------------+------------+
|   1 |   1 | "Технолог" Белгород                                      | Технолог              | 0       | 0             | 1976-00-01 | 1981-00-00 |
|   2 |   1 | "Локомотив" Белгород                                     | Локомотив             |         |               | 1981-00-00 | 1987-00-00 |
|   3 |   1 | "Аграрник" Белгород                                      | Аграрник              |         |               | 1987-00-00 | 1992-00-00 |
|   4 |   1 | "Белогорье" Белгород                                     | Белогорье             |         |               | 1992-00-00 | 1994-00-00 |
|   5 |   1 | "Локомотив" Белгород                                     | Локомотив             |         |               | 1994-00-00 | 1995-00-00 |
|   6 |   1 | "Белогорье" Белгород                                     | Белогорье             |         |               | 1995-00-00 | 1997-00-00 |
|   7 |   1 | "Белогорье-Динамо" Белгород                              | Белогорье-Д           |         |               | 1997-00-00 | 2001-00-00 |
|   8 |   1 | "Локомотив-Белогорье" Белгород                           | Белогорье             |         |               | 2001-00-00 | 2011-00-00 |
|  19 |  11 | "Нефтяник Башкортостана"                                 | Нефтяник              |         |               | 2001-00-00 | 2007-00-00 |
|  20 |  11 | "Нефтяник Башкирии"                                      | Нефтяник              |         |               | 1992-00-00 | 2001-00-00 |
|  47 |  45 | "ГУВД-Динамо" Краснодар                                  | ГУВД-Динамо           |         |               | 2001-00-00 | 2010-00-00 |
|  59 |   5 | "Искра" Одинцово                                         | Искра                 |         |               | 1979-00-00 | 0000-00-00 |
|  65 |  27 | "Локомотив" Новосибирск                                  | Локомотив             |         |               | 1997-00-00 | 0000-00-00 |
|  66 |  27 | "Север" Новосибирск                                      | Север                 |         |               | 1977-00-00 | 1997-00-00 |
|  89 |  11 | "Урал" Уфа                                               | Урал                  |         |               | 2007-00-00 | 0000-00-00 |
|  99 |  12 | "Ярославич" Ярославль                                    | Ярославич             |         |               | 2007-00-00 | 0000-00-00 |
| 100 |  12 | "Нефтяник" Ярославль                                     | Нефтяник              |         |               | 1988-00-00 | 2007-00-00 |
| 113 |  45 | "Динамо" Краснодар                                       | Динамо Кр             |         |               | 2010-00-00 | 0000-00-00 |
| 116 |   1 | "Белогорье"                                              | Белогорье             |         |               | 2011-00-00 | 0000-00-00 |
+-----+-----+----------------------------------------------------------+-----------------------+---------+---------------+------------+------------+
...
Рейтинг: 0 / 0
30.01.2019, 16:02
    #39767163
KobaLTD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
miksoftПопробуйте без сортировки сложить результат в табличку, а потом сделать из нее select с сортировкой. Результат будет такой же?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TEMPORARY TABLE top10customers
    -> SELECT a.*, b.name,b.id FROM vs_my_player_team as a  LEFT JOIN vs_my_team_name as b on a.tid=b.tid and a.begin_date >= b.begin_date and a.end_date <=if(b.end_date='0000-00-00','2020-12-31',b.end_date) where a.pid=6
    -> select * from top10customers;

+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+
| id   | pid | tid | team_name | begin_date | end_date   | typeID | number | name                                        | bid  |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+
| 3576 |   6 |   5 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | "Искра" Одинцово                            |   59 |
| 4183 |   6 |  27 |           | 0000-00-00 | 0000-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |   65 |
| 4414 |   6 |  27 |           | 0000-00-00 | 0000-00-00 |      3 |      7 | "Локомотив" Новосибирск                     |   65 |
|  700 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     10 | "Урал" Уфа                                  |   89 |
| 4313 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     11 | "Урал" Уфа                                  |   89 |
| 4435 |   6 |  11 |           | 0000-00-00 | 0000-00-00 |      3 |     11 | "Урал" Уфа                                  |   89 |
| 2735 |   6 |  12 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | "Ярославич" Ярославль                       |   99 |
| 4998 |   6 |  45 |           | 0000-00-00 | 0000-00-00 |      3 |     18 | "Динамо" Краснодар                          |  113 |
|   34 |   6 |   1 |           | 0000-00-00 | 0000-00-00 |      3 |      1 | NULL                                        | NULL |
+------+-----+-----+-----------+------------+------------+--------+--------+---------------------------------------------+------+

...
Рейтинг: 0 / 0
30.01.2019, 16:10
    #39767173
KobaLTD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
Все нашел решение сам:
Для всех остальных - sql_mode исключить NO_ZERO_IN_DATE,NO_ZERO_DATE
...
Рейтинг: 0 / 0
30.01.2019, 21:12
    #39767319
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN и проблемы при сортировки
KobaLTDsql_mode исключить NO_ZERO_IN_DATE,NO_ZERO_DATEВот только сейчас разглядел, что в ваших исходных датах нулевые число и месяц.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN и проблемы при сортировки / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]