motto13
@motto13
Вечно молодой

Как выбрать данные одним запросом исходя из трех таблиц?

Есть связанные таблицы
product (id, user_id, alias, title,category ...) - товар, user_id автор публикации
review (id, product_id, user_id, content,...) - отзыв о товаре, product_id - id товара, user_id автор товара
comments_product (id, product_id, user_id, content,...) - комментарий к товару, product_id - id товара, user_id автор товара
comments_review (id, review_id, user_id, content,...) - комментарий к отзыву, review_id- id отзыва, user_id автор товара
На странице профиля товара нужно вывести все комментарии пользователя, каждый комментарий должен содержать ссылку alias на товар его название и сам текст комментария, так как и комментарий и отзыв все находятся на странице продукта, как выбрать данные одним запросом исходя из таблиц comments_product и comments_review где user_id=? ?
Здесь пример как я делал для вывода с таблицы product и comments_product
$database = Database::openConnection();
$query = "SELECT product.id AS p_id, product.alias AS p_alias, product.title AS p_title,";
$query .= "users.id AS u_id, users.name AS u_name, ";
$query .= "comments_product .content AS c_p_content, ";
$query .= "categories.title AS cat_title ";
$query .= " FROM  users, categories, product ";
$query .= " LEFT JOIN comments_product  ON comments_product.user_id=:user_id AND comments_product.product_id=product .id ";
$query .= " WHERE  product.id IN ( SELECT product_id FROM comments_product  WHERE user_id=:user_id)";
$query .= "  AND categories.code = product.category AND users.id= product.user_id";
$query .= "  ORDER BY product.created DESC ";
$database->prepare($query);
$database->bindValue(':user_id', $userId);
$database->execute();
debug($database->fetchAllAssociative());
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
motto13
@motto13 Автор вопроса
Вечно молодой
Мое решение моего вопроса
$database = Database::openConnection();
        $query  = "SELECT * FROM (";
        $query .= "SELECT 'comments_product' AS target, CP.content AS content, CP.created AS created, U.name, P.id AS product_id  ";
        $query .= "FROM users as U, product as P, comments_product as CP WHERE U.id=CP.user_id AND P.id=CP.product_id AND CP.user_id=:user_id1";
        $query .= " UNION ";
        $query .= "SELECT 'comments_review' AS target, CR.content AS content, CR.created AS created, U.name, Q.id AS product_id ";
        $query .= "FROM users AS U, product as P, comments_review AS CR WHERE U.id=CR.user_id AND CR.user_id=:user_id2";
        $query .= " AND P.id=(SELECT product_id FROM review WHERE id=CR.review_id)";
        $query .= ") AS comments  ORDER BY created DESC";
        $database->prepare($query);
        $database->bindValue(':user_id1', $userId);
        $database->bindValue(':user_id2', $userId);
        $database->execute();
        debug($database->fetchAllAssociative());
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы