Я пытаюсь создать доступную для поиска базу данных языков, на которых говорят мои пользователи.
Например, у меня может быть
$john = array("english", "french", "spanish");
$jack = array("french", "spanish");
$jill = array("english", "spanish");
И я хочу сохранить их в базе данных MySQL, чтобы потом запустить что-то вроде (псевдокода)
SELECT * FROM users WHERE spoken_languages = "french" and "spanish"
Я знаю, что если бы у меня были столбцы speaks_english
, speaks_french
и speaks_spanish
, я мог бы искать
SELECT * FROM users WHERE speaks_french = "true" and speaks_spanish = "true"
Но масштабируемость добавления нового столбца каждый раз, когда я сталкиваюсь с новым языком, не очень хороша. Я рассматривал такую таблицу, как
john | english
john | french
john | spanish
jack | french
jack | spanish
jill | english
jill | spanish
Потому что, по крайней мере, чтобы вернуть языки, на которых говорит пользователь, я мог бы просто запустить
SELECT * FROM spoken_languages WHERE user = "jack"
Но для того, чтобы выполнить поиск людей, говорящих как по-французски, так и по-испански, мне нужно будет запросить всех пользователей, говорящих по-французски, всех пользователей, говорящих по-испански, а затем вычислить пересечения. Это кажется ужасно неэффективным.
Поэтому я спрашиваю вас, как я могу сохранить этот массив разговорных языков, чтобы я мог позже искать в базе данных, не разрушая сервер?
users
, таблицуlanguages
и таблицу отношенийusers_languages
. - person jszobody   schedule 12.06.2014