Как проверить наличие строки в MySQL без использования INSERT IGNORE? - PullRequest
0 голосов
/ 27 сентября 2011

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

$query = "INSERT INTO listings (title, description) VALUES ('$title','$description')";

Эта таблица списков содержит столбец "postid" в качестве первичного ключа, который автоматически увеличивается.

Я не хочу делать INSERT IGNORE и заставлять его проверять postid. Вместо этого я хотел бы сохранить структуру таблицы одинаковой и проверить, существует ли $ title ... и не вставлять, если она есть.

Позволит ли php / mysql мне как-нибудь запустить:

If ($title does not exist) {
$query = "INSERT INTO listings (title, description) VALUES ('$title','$description')";
}  

Если так, как бы я это написал?

Спасибо за любые предложения.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Вы можете сделать расплавление:

Запросите вашу базу данных, чтобы увидеть, существует ли уже какой-либо список с данным заголовком и если запрос подсчета возвращает 0, выполните оператор вставки:

$result = mysql_query('SELECT count(*) as total from listings where title="$title"');

$result = mysql_fetch_array($result);    

if($result['total'] == 0){
    $query = mysql_query("INSERT INTO listings (title, description) VALUES ('$title','$description')");
}

Но я настоятельно рекомендую вам не манипулировать вашей базой данных таким образом. Лучше использовать ORM или класс базы данных, вместо того, чтобы ставить операторы SQL повсеместно.

Удачи.

0 голосов
/ 27 сентября 2011

Попробуйте это:

INSERT INTO listings (title, description) VALUES ('$title','$description')
FROM dual WHERE not exists (SELECT title FROM listings WHERE title = '$title');

Или вы можете сделать так:

$result = mysql_query("UPDATE listings SET description = '$description' WHERE title ='$title';");        
if (mysql_affected_rows() == 0) {
    $result = mysql_query("INSERT INTO listings (title, description) VALUES ('$title','$description');");
}
...