Использование нескольких предложений where для проверки двух таблиц - PullRequest
0 голосов
/ 08 апреля 2019

Итак, у меня есть SQL-оператор в php-файле, связанный с формой, которая получает данные от пользователя. Когда они входят в жанр, он обновляет все записи в этом столбце, а не конкретную, которую они выбрали.

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

$sql = "UPDATE album 
    SET genre_id = (SELECT genre_id
    FROM genre
    WHERE genreName='" . $_POST['lstGenre'] . "'
    )";

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

$sql = "UPDATE album 
    SET genre_id = (SELECT genre_id
    FROM genre
    WHERE genreName='" . $_POST['lstGenre'] . "'
    )
        FROM album
        WHERE album_id='" . $_POST['album_id'] . "'";

Это одна версия, которую я пробовал, но потом она ничего не обновляет. Вот что я ищу: Разный жанр для каждого случая

Это работает, я решил это:

$sql = "UPDATE album 
        SET genre_id = (SELECT genre_id
        FROM genre
        WHERE genreName='" . $_POST['lstGenre'] . "'
        )
        FROM album
        WHERE album_id='" . $thisAlbum['album_id'] . "'";

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Ваш запрос должен выглядеть следующим образом:

UPDATE album a       
    SET genre_id = (SELECT g.genre_id
                    FROM genre g
                    WHERE g.genreName = ?
                   )
    WHERE a.album_id = ?;

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

0 голосов
/ 08 апреля 2019

Почти, но Update ... From ... Where ... недействительно, вам просто нужно избавиться от раздела От во второй части. Это должно быть что-то вроде

$sql = "UPDATE album 
SET genre_id = (SELECT genre_id
    FROM genre
    WHERE genreName='" . $_POST['lstGenre'] . "'
)
WHERE album_id='" . $_POST['album_id'] . "'";

РЕДАКТИРОВАТЬ: Кроме того, такие подзапросы должны тянуть только одну строку. Убедитесь, что в таблице жанров нет нескольких строк, соответствующих указанному genreName. Хотя вы должны получить ошибку sql, если бы это было так.

...