sergeissНет, id могут пересекаться. Разные таблицы могут иметь id 1,2,3...25, но в той же таблице пользователей их много, а админов пара человек допустим.
Что будут вьюхи делать? Извлекать дополнительную информацию?
Тогда опять таки возвращаемся к моему вопросу, каждую таблицу отдельно ворошить или одним запросов получить?
PS. Для данного примера, да, структура не верна и стоит их объединить, я это понимаю.
Но возникает ситуация, когда таблицы невозможно объединить.
Во, давайте пример с выпиской в интернет магазине (с личным счетом, куда можно положить средства для оплаты или каким то способ их заработать на сайте):
1. Пользователь может пополнить свой счет
2. Может на чем то заработать
3. Может перечислить кому либо средства
4. Можно купить товар
В итоге нужно писать выписку с названиями:
1. Пополнил счет (не идет пересечения с другими товарами)
2. Заработал по акции (тоже не пересекается, если не ведем названия акций)
3. Перечислил средства
Пользователю (тот самый name в строке)
4. Приобрел
Кружку (второй name, но явно в одну таблицу не поместим все это?)
В реале, я не храню саму строку в базе, а только ссылку на языковой файл.
Таблица такая:
entry, user, operation, with, amountВ выборку нужно собрать и имена пользователей и имена товаров.
В данном примере же нет сомнений, что неправильная структура может быть и мы должны товары хранить в одной таблице с пользователями? Или две выписки создавать? А как их потом объединять?
В принципе union наверно можно использовать:
В каждый из запросов просто внедряем where type = 0, во вторую where type = 1 с разным join. Структура ответа общая, тогда они же вполне верно объединяться?
Только как тогда будет выглядеть order by и limit?
Пошел читать справку по union.
UPD:Да, union вполне справился с данной задачей...
Главное не потерять строки из запроса в последствии. Один из запросов должен быть как минимум left join, например с type = 0, как общедоступный, а type = 1 только inner.
Сортировка и лимит как я понял применяется к результату запроса union.
Еще ни разу не использовал union
UPD2:Кстати наверное такой запрос будет весьма сложно обслуживать.
А добавление третьей таблицы просто уничтожает желание его дописывать каждый раз.
Какая альтернатива этому имеется?
Что переложить на вьюху?
1. Делать основной запрос с объединением с самой вероятной таблицей.
2. Все что не попало в общий запрос, запросить дополнительно и отдельно?