#mysql #database
#mysql #База данных
Вопрос:
У меня есть таблица: Country (идентификатор int, имя varchar (100), спортивный varchar (300))
------------------------------------
id | name | Sports
------------------------------------
1 | USA | {Football}{Basket}
2 | Canada | {Swimming}
.. | ... | ...
------------------------------------
Для того, чтобы нормализовать таблицу country, мне нужен скрипт MySQL, который будет перебирать каждую строку в таблице country, а затем извлекать sport в новую таблицу Sport (id, sportName). вот так:
---------------------------------
id | sport
---------------------------------
1 | Football
2 | Basket
3 | Swimming
.. | .....
-----------------------------------
и, наконец, мне нужно создать таблицу Country_Sports, чтобы сохранить каждую страну, например :
Country_Sports (country_id, sport_id).**
-----------------------------
country_id | sport_id
-----------------------------
1 | 2
1 | 3
3 | 1
-------------------------
Я создал функцию для разделения «{«»}»», но этого все равно недостаточно, потому что я не знаю, как использовать ее для извлечения всех видов спорта для каждой страны.
CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) 1),
delim, '');
пример :
SPLIT_STR(Sports, '{', 2)
Комментарии:
1. Где проходит ваш суд? Это может быть сделано непосредственно с помощью mysql или с помощью php.
2. Мне нужен только MySQL без php! смотрите обновление, пожалуйста
Ответ №1:
Поскольку вы создали таблицу country, теперь вы можете создать таблицу sports из таблицы country с теми же столбцами следующим образом
create table sport as select * from country;
select * from sport;
Это просто означает, что будут использоваться все столбцы и строки в таблице country
для создания спортивной таблицы.
Дополнение:
Ваш вопрос как-то сбивает с толку. Если вы говорите о запросе записей отдельно, вы можете использовать идентификатор или название страны
Например, для запроса столбца sports для США как страны, становится
select name from country where id=1; or
select * from country where name='USA';
следовательно, для запроса столбца sports для Канады как страны становится
select name from country where id=2; or
select * from country where name='Canada';
Если это не то, что вы хотите, не могли бы вы, пожалуйста, сформулировать свой вопрос так, чтобы мы могли вас понять.
Комментарии:
1. какой скрипт для извлечения «{«»}» для каждой страны, это как цикл, перед созданием таблицы.
2. он извлечет все содержимое таблицы country и создаст с ним таблицу sport
3. Я знаю это, но как разделить все виды спорта внутри столбца: спорт, пожалуйста, посмотрите на мою таблицу стран
4. любой ответ, пожалуйста.
5. Я обновил данный вам ответ. пожалуйста, проверьте ответ выше, чтобы увидеть, решит ли он вашу проблему