Имеем 2 таблицы: 1 - user: c полями: id, username 2 - post: с полями: id, username_id, post, full_post Задача получить данные (страница статьи) с данными: ЗАГОЛОВОК = post, КТО АВТОР = username_id => username, СТАТЬЯ = full_post, Необходимо выполнить 2 запроса для этого в данном случае. Вопрос можно как то это привести к одному запросу ?
LEFT JOIN Хотя смотря в какой ситуации: для страницы конкретной статьи можно и два запроса. --- Добавлено --- P.S. LEFT JOIN в списках статей, выбираемых не по автору, будете использовать.
А если добавить еще таблицу: user_life: с полями: (id, username из таблицы => user), (username_id из таблицы => post) и в бушующем может еще с какими таблицами делать связки, например комментарии и брать КТО АВТОР из нее что бы не задействовать таблицу user. ?
@Павел Голубцов пожалуйста будь менее абстрактным. Есть ощущение, что ты оптимизируешь то, чего нет. Покажи подалуйста структуру таблиц в виде SQL: как CREATE TABLE и минимальный набор тестовых данных. http://sqlfiddle.com/ или https://www.db-fiddle.com/ --- Добавлено --- P.S. Пока что твой вопрос не содержит даже намёка на PHP. Переношу тему. --- Добавлено --- @miketomlin почему ты советуешь LEFT JOIN ? Любопытно.
То есть у тебя всегда LEFT, когда есть связь? --- Добавлено --- Это неправильно. Открытое (т.е. внешнее left|right outer join ) соединение должно быть обоснованным.
Ребята, left outer join для тех случаев, когда ты выводишь посты и внезапно может оказаться, что у поста нет автора, но пост надо вывести всё равно. По умолчанию используют закрытое (внутреннее, inner join) соединение, при котором косячные связи не выведутся. Поэтому повторю вопрос: почему left, что к этому подвигло? --- Добавлено --- @Павел Голубцов https://ru.m.wikipedia.org/wiki/Join_(SQL)
@artoodetoo, мне любопытно, почему нет? См. Если имеются какие-то опасения, связанные с отсутствием автора, для этого есть спец. техники. Или ты предлагаешь не выбирать статью в отсутствие автора? ОК, если есть на то основания, добавляйте спец. условие в запрос. Я таких оснований не увидел. Обычное присоединение к статье метаданных автора.
Тогда добавь еще на всяк. случай таблицу dragon_death Хочешь лишить пользователей потенциала когда-нибудь стать авторами? Для такого простого разделения ролей можно без доп. таблицы обойтись. А если вводить ее, то явно не так, как ты придумал. И вообще конкретно имена обычно не нормализуются. Сделай просто user_id (uid, user). Можно и слово author использовать (комментирующие пользователи – тоже в каком-то смысле авторы).
Сложнее всего доказывать очевидное outer join это особый случай объединения, а не наоборот. --- Добавлено --- Но я не буду разбиваться в говно доказывая это. Если тебе нравится везде писать left, пиши на здоровье. У меня только один вопрос: а ты когда-нибудь писал right join?
Согласен с обоими утверждениями. Везде??? Возможно, когда-то и писал. Но у меня есть товарищи, которые помогли навести порядок в этом деле.
Это если связь есть PHP: SELECT * FROM post JOIN user USING( username_id ) Иначе PHP: SELECT post.*, user.username FROM post JOIN user ON user.id = post.username_id
Спасибо за пищю для размышлений. Пришла мысль заменить в таблице post: поле username_id на username. Так как создавать смогут только зарегистрированные пользователи и брать из $_SESSION['user'] значение для username в запрос на создание записи в таблицу POST. С подводными камнями не столкнусь ?
столкнешься. PHP: SELECT post.*, user.username nickname FROM post JOIN user ON user.id = post.username
какие камни? у тебя базовых знаний ноль, это равносильно тому, что ты прыгаешь в пустой бассейн... камней там тоже нет в ленте попалась статья на глаза https://rb.ru/opinion/ne-programmist/
Код (Text): влюбленность в дело (если человек в жизни не написал ни единой строчки кода для себя, потому что нравится, — вряд ли он является программистом); @miltorg , прям про тебя
Сидит такой и думает какой я умный все другие дебилы, как же мне хорошо, высрал крик души полегчало !