#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