-- create a temporary table
CREATE TEMPORARY TABLE game_player (
player_id INT NOT NULL,
game_date DATE NOT NULL,
PRIMARY KEY (player_id, game_date)
);
-- populate the table for player1-11
INSERT INTO game_player
SELECT player1, STR_TO_DATE(`day`, '%Y%m%d') FROM YOURTABLE;
INSERT INTO game_player
SELECT player2, STR_TO_DATE(`day`, '%Y%m%d') FROM YOURTABLE;
...
INSERT INTO game_player
SELECT player11, STR_TO_DATE(`day`, '%Y%m%d') FROM YOURTABLE;
-- view player_id and the date he played - the data you populated
SELECT * FROM game_player;
-- GROUP_CONCAT(game_date) to see what days they played (NOT REQUIRED)
-- most-used player with #games
SELECT player_id, COUNT(*) games, GROUP_CONCAT(game_date) game_dates
FROM test.game_player
GROUP BY player_id
ORDER BY games DESC
LIMIT 1;
Вы должны учитывать при изменении вашего текущего дизайна. Наличие столбца для каждого игрока в одной таблице не очень хорошо. У вас должна быть таблица игроков, связанная с вашей пользовательской таблицей. Таким образом, вам не нужны эти одиннадцать столбцов в таблице пользователей. –
Я знаю, и это был мой первоначальный подход, но мне пришлось изменить его с помощью этого дизайна, потому что он более эффективен, чем 11 строк для каждой линейки, каждый из которых имеет столбцы lineup_id и player_id –
хорошо, если вы собираетесь покинуть стол так что я бы сделал, это создать хранимую процедуру. там создайте временную таблицу с идентификатором игрока столбца и выберите каждую из столбцов игрока (1-11) в таблицу. то вы можете выбрать, выбрать ли вы в таблице темп и получить нужные данные. но, как сказал Хорхе Кампос, вы действительно должны изменить дизайн того, как это работает. –