powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN и проблемы при сортировки
10 сообщений из 10, страница 1 из 1
LEFT JOIN и проблемы при сортировки
    #39767021
KobaLTD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делаю так
Код: 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
LEFT JOIN и проблемы при сортировки
    #39767065
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите структуру и содержимое исходных таблиц.
...
Рейтинг: 0 / 0
LEFT JOIN и проблемы при сортировки
    #39767109
KobaLTD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю чем это поможет но вот

Код: 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
LEFT JOIN и проблемы при сортировки
    #39767127
KobaLTD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По данным выборка производиться правильно. Вопрос в том - почему при добавлении ORDER BY по ЛЮБОМУ столбцу приводит к "обнулению" значений даты?
...
Рейтинг: 0 / 0
LEFT JOIN и проблемы при сортировки
    #39767141
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KobaLTD,

Раз вы не показываете всех данных, то могу предположить, что при сортировке вперёд выезжают именно те записи, в которых дата нулевая.
...
Рейтинг: 0 / 0
LEFT JOIN и проблемы при сортировки
    #39767146
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте без сортировки сложить результат в табличку, а потом сделать из нее select с сортировкой. Результат будет такой же?
...
Рейтинг: 0 / 0
LEFT JOIN и проблемы при сортировки
    #39767157
KobaLTD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
LEFT JOIN и проблемы при сортировки
    #39767163
KobaLTD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
LEFT JOIN и проблемы при сортировки
    #39767173
KobaLTD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все нашел решение сам:
Для всех остальных - sql_mode исключить NO_ZERO_IN_DATE,NO_ZERO_DATE
...
Рейтинг: 0 / 0
LEFT JOIN и проблемы при сортировки
    #39767319
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KobaLTDsql_mode исключить NO_ZERO_IN_DATE,NO_ZERO_DATEВот только сейчас разглядел, что в ваших исходных датах нулевые число и месяц.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN и проблемы при сортировки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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