Что я неправильно сделал в связях таблиц?

Ссылка скопирована
1 ответ

Почему id юзера вместо id коммента подставляется?
из юзеров идет две связи к таблице постов и к комментам.

Что я неправильно сделал в связях таблиц?

Что я неправильно сделал в связях таблиц?

Дополнительно:

так а где связи то? Где запрос?

  • ThunderCat, вот я картинку загрузил
  • Ответы:

    Вангую что в запросе что-то типа селект * , соответственно айди тупо переписывается. Создайте алиас для нужного поля, типа comments.id as comment_id, users.id as user_id

    Если используется построитель запросов, укажите какие поля нужны и выставите алиасы через встроенные методы.

    • да звездочка есть типа все выбирает...тоже думал возможно нужно без нее..
      SELECT                                     comments.*,                                     comments.id,                                     comments.text_comm,                                     comments.post_id,                                     comments.user_id,                                     post.id,                                     users.id,                                     users.username                                     FROM comments                                     INNER JOIN post                                     ON comments.post_id = post.id                                     INNER JOIN users                                     ON comments.user_id = users.id                                     WHERE comments.post_id = :post_id                                     ORDER BY comments.id DESC"

      SELECT comments.*, comments.id, comments.text_comm, comments.post_id, comments.user_id, post.id, users.id, users.username FROM comments INNER JOIN post ON comments.post_id = post.id INNER JOIN users ON comments.user_id = users.id WHERE comments.post_id = :post_id ORDER BY comments.id DESC"

      понял...попробую алиасы послезавтра сделать..сейчас некогда завтра на работу

    • green300, Во первых либо звездочка, либо перечисление, и перечисление лучше. Во вторых - как я и написал, допишите алиасы к дублирующимся полям в выборке.
    • ThunderCat, да я понял спасибо..переделаю
    • ThunderCat, я проставил алиасы, но тут у меня оказалось что юзер стал выводится дважды.
      тут я решил удалить подключения с таблицы юзеров и с таблицы поста -
      post.id,
      users.id
      и таким образом стало показывать все нормально.
      и у меня вопрос такой - если таблицы связаны по ключам, то в запросе не нужно писать эти таблицы(строки из них точнее)? они получается автоматом сами прописываются?
    • green300, Ничего не понятно. Напишите что за запрос вы создали и как поменяли?
    • ThunderCat, ну это вопрос риторический - вот если таблицы связаны каким - либо столбцом, то в запросе получается не нужно указывать отдельно связанную таблицу и столбец? достаточно ее в джойне прописать (связанную таблицу и столбец)?
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Ирина WP Ответ

    Для начала давайте разберем, какие могут быть причины проблем с связями таблиц в базе данных. Возможно, вы неправильно определили тип связи между таблицами, или у вас неправильно указаны внешние ключи.

    Для того чтобы убедиться, что все связи таблиц определены корректно, вам необходимо проверить следующее:

    1. Убедитесь, что внешние ключи правильно указаны в каждой из таблиц. Например, если у вас есть таблица "users" и таблица "posts", и каждый пост должен принадлежать определенному пользователю, то в таблице "posts" должно быть поле, которое ссылается на поле с идентификатором пользователя в таблице "users".

    2. Проверьте типы связей между таблицами. Например, если у вас один ко многим отношение, то в таблице "многие" должен быть внешний ключ, указывающий на таблицу "один". Если у вас многие ко многим отношение, то вам понадобится промежуточная таблица, которая связывает две основные таблицы.

    3. Убедитесь, что у вас правильно настроены правила обновления и удаления связей. Например, если у вас есть связь "CASCADE", то при удалении записи из одной таблицы, все связанные записи из другой таблицы будут также удалены.

    Давайте посмотрим на пример кода на языке PHP, который показывает создание таблиц с правильными связями:

    CREATE TABLE users (
        id INT PRIMARY KEY,
        name VARCHAR(50)
    );
     
    CREATE TABLE posts (
        id INT PRIMARY KEY,
        title VARCHAR(100),
        content TEXT,
        user_id INT,
        FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    );

    CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE posts ( id INT PRIMARY KEY, title VARCHAR(100), content TEXT, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );

    В данном примере мы создаем две таблицы "users" и "posts", и устанавливаем связь между ними по полю "user_id". При удалении пользователя из таблицы "users", все его посты из таблицы "posts" также будут удалены благодаря настройке "ON DELETE CASCADE".

    Надеюсь, данная информация поможет вам исправить проблемы с связями таблиц в вашей базе данных. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно