Забавно, что я еще никогда не сталкивался с этим!
Мне никогда не приходило в голову, что на одной таблице могут быть отношения "многие-многие", пока я не начал работать в системе, где пользователи могут "дружить" друг с другом (социальные сети).
Стандартная таблица поиска, по крайней мере, так, как я использую ее, здесь не подходит. Давайте упростим:
Таблица пользователя имеет столбец "id" и "name".
В таблице user_relationship есть "uid1" и "uid2", представляющие пользователей, которые являются "друзьями" или "почками" или "приятелями" или "что угодно".
Очень быстро становится очевидным, что проблема здесь - uid1 и uid2 - это тот же тип данных из того же столбца той же таблицы, что означает, что уникальные ключи становятся ошибочными.
т.д.: uid1 = 1 uid2 = 2
То же, что и:
uid1 = 2 uid2 = 1
И поэтому может вернуть 2 записи или 0 записей, если запрос выполнен неправильно.
В духе проектирования таблицы хорошо, я не хочу, чтобы дважды сканировать всю таблицу, чтобы проверить существующие значения.
Есть ли какая-то трюк для обработки этого? Это вопрос дизайна, который мне никогда не приходил в голову, и это раздражает меня, потому что я знаю, что есть какой-то простой трюк, чтобы заставить его работать.
Прежде чем вы спросите, я еще ничего не пробовал, потому что я уже вижу, что мой любимый способ связать вещи (таблицы поиска) недостаточен для моих нужд здесь, и мне нужна помощь - я ничего не могу найти на SO или Google: (
Спасибо заранее.