MYSQL SELECT с использованием Concat не возвращает желаемых результатов?

#mysql #select

#mysql #выберите

Вопрос:

У меня есть таблица, в которой есть идентификатор пользователя игрока 1 и идентификатор пользователя игрока2. Это касается теннисного спорта. Если пользователь играет в одиночные игры, то у игрока 1 есть идентификатор пользователя, а у игрока 2 — 0. Если пользователи играют в парном разряде, то у player1 есть идентификатор пользователя, а у player2 есть идентификатор пользователя.

 wp_divisions2
----------------------------------------------------------
|player_div_id|div_group_id|div_player1_id|div_player2_id|
----------------------------------------------------------
| 2104        | 1          |  234         | 0            |
----------------------------------------------------------
| 2110        | 1          |  234         | 456          |
----------------------------------------------------------

wp_users
----------------------
| ID   | display_name|
----------------------
| 234  | John Tennis |
----------------------
| 456  | Beth Smith  |
----------------------
 

Я использую concat для объединения имен двух пользователей в одну строку. Если одиночный «Джон Теннис», если двойной «Джон Теннис — Бет Смит».

Этот запрос MYSQL работает для парных, но не одиночных. Если я использую это для синглов, я получаю все нули в поле Concat.

 Select p1.id, concat(p1.display_name , " - ", p2.display_name), d2.div_wins, d2.div_loss, d2.div_gwins, d2.div_glost, d2.div_rating, lg.league_desc 
FROM wp_users p1
JOIN wp_divisions2 d2 ON p1.id = d2.div_player1_id
LEFT JOIN wp_users p2 ON p2.id = d2.div_player2_id
JOIN wp_leagues lg ON d2.div_league_ID = lg.league_id
Where d2.player_div_id = 2110 AND d2.div_group_id = 1
ORDER BY d2.div_wins DESC, d2.div_loss ASC, d2.div_rating DESC

Singles results:
--------------------------------------------------------------------
| player_div_id  | concat(p1.display_name , " - ", p2.display_name)|
--------------------------------------------------------------------
| 2104           | NULL                                            |
--------------------------------------------------------------------

Doubles results:
--------------------------------------------------------------------
| player_div_id  | concat(p1.display_name , " - ", p2.display_name)|
--------------------------------------------------------------------
| 2110           | John Tennis - Beth Smith                        |
--------------------------------------------------------------------
 

Желаемый результат, который я хотел бы, это:

 --------------------------------------------------------------------
| player_div_id  |                                                 |
--------------------------------------------------------------------
| 2104           | John Tennis                                     |
--------------------------------------------------------------------
| 2110           | John Tennis - Beth Smith                        |
--------------------------------------------------------------------
 

Комментарии:

1. Я думаю, что вы немного перепутали параметры concat и coalese, посмотрите в руководстве

Ответ №1:

Может быть, вы можете использовать IFNULL вместо того, чтобы объединяться следующим образом:

 Select p1.id, concat(p1.display_name , ifnull(concat(" - ",p2.display_name),"")), d2.div_wins, d2.div_loss, d2.div_gwins, d2.div_glost, d2.div_rating, lg.league_desc 
FROM wp_users p1
JOIN wp_divisions2 d2 ON p1.id = d2.div_player1_id
LEFT JOIN wp_users p2 ON p2.id = d2.div_player2_id
JOIN wp_leagues lg ON d2.div_league_ID = lg.league_id
Where d2.player_div_id = 2104 AND d2.div_group_id = 1
ORDER BY d2.div_wins DESC, d2.div_loss ASC, d2.div_rating DESC