Как правильно создать запрос?

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

Здраствуйте!
Есть 2 таблицы работающие с отзывами:
`review` - основная таблица (связывает с кастомером и тд)
`review_detail` - хранит сам отзыв

Мне нужно удалить дубликаты отзывов по 2 полям `title`, `nickname`, но при этом сохранить хотя бы 1 запись

Я создал такой SQL, но у меня все отзывы просто удалились

DELETE FROM `review` WHERE `review_id` NOT IN (SELECT max(`review_id`) FROM `review_detail` GROUP BY `title`, `nickname`  HAVING count(*) > 1)

DELETE FROM `review` WHERE `review_id` NOT IN (SELECT max(`review_id`) FROM `review_detail` GROUP BY `title`, `nickname` HAVING count(*) > 1)

Может подскажите что я делаю не так?

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

что я делаю не так?

Вопрос публикуете не так. Выложите CREATE TABLE + INSERT INTO с примером данных (5-7 записей) и требуемый финальный результат с пояснениями, а также укажите точно СУБД (судя по тексту запроса - MySQL?), включая точную версию.

  • Akina,

    Виноват
    https://www.mycompiler.io/view/HnrSXkf338R

    Ожидется результат записей в таблице review
    3, 2
    4, 2
    5, 2

    СУБД: MySQL

  • Используйте вместо review_id стандартную функцию ROW_NUMBER(). review_id - одинаковая для двух одинаковых отзывов, ROW_NUMBER() - уникальна для каждой строки в запросе.
  • DELETE t1  FROM review_detail t1 JOIN review_detail t2 USING (title, nickname) WHERE t1.detail_id < t2.detail_id;

    DELETE t1 FROM review_detail t1 JOIN review_detail t2 USING (title, nickname) WHERE t1.detail_id < t2.detail_id;

    https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=dc6a90...

    • Спасибо, все равно конечно не то, но я уже нашел решение)
      DELETE FROM review WHERE review_id NOT IN (SELECT MAX(review_id) FROM review_detail GROUP BY title);

      DELETE FROM review WHERE review_id NOT IN (SELECT MAX(review_id) FROM review_detail GROUP BY title);

    • nikitoshq, а можно полюбопытствовать, что значит "не то"?

      Да, Ваше решение вообще-то выполняет другую задачу. То есть абсолютно другую.

    Нужно решить такую задачу?

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

    Заказать помощь
    Лучший ответ
    1
    Кирилл JS Ответ

    Для создания запроса на языке PHP, вам необходимо использовать функции и методы, предоставляемые различными расширениями PHP. Вот пример того, как можно создать запрос к базе данных MySQL с использованием объектно-ориентированного подхода:

    connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
     
    // Создаем SQL запрос
    $sql = "SELECT id, name, email FROM users";
    $result = $conn->query($sql);
     
    // Проверяем, есть ли результат
    if ($result->num_rows > 0) {
        // Выводим данные каждой строки результата
        while($row = $result->fetch_assoc()) {
            echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
        }
    } else {
        echo "0 results";
    }
     
    $conn-&gt;close();
    ?&gt;

    connect_error) { die("Connection failed: " . $conn-&gt;connect_error); } // Создаем SQL запрос $sql = "SELECT id, name, email FROM users"; $result = $conn-&gt;query($sql); // Проверяем, есть ли результат if ($result-&gt;num_rows &gt; 0) { // Выводим данные каждой строки результата while($row = $result-&gt;fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "0 results"; } $conn-&gt;close(); ?&gt;

    В данном примере мы устанавливаем соединение с базой данных MySQL, создаем SQL запрос для выборки данных из таблицы "users" и выводим результат на экран. Помните, что перед использованием данных из базы данных необходимо проводить их обработку для предотвращения SQL инъекций.

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

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

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

    комментарий

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

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