@awlurker

Как в MySQL/PHP ограничить количество записей в таблице по значению одного из полей?

К примеру, есть таблица с пользовательскими картинками:
CREATE TABLE `images` (
  `user_id` int(11) NOT NULL,
  `image` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Есть требование: у каждого пользователя может быть не более 3 картинок.
Когда пользователь загружает картинки последовательно, то все просто:
$result = mysql_query( 'SELECT COUNT(*) FROM images WHERE user_id = 1' );
if( mysql_result( $result, 0 ) < 5 )
{
    add_image( );
}

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

Пока вижу два решения (ну и еще одно совсем бредовое):
1. Заблочить целиком таблицу на момент проверки/вставки новой записи
2. Использовать какой-нибудь механизм синхронизации PHP, например flock()
3. Отказаться от блокировок, пусть закачает сколько успеет. Потом подчистить лишние записи в cron-скрипте.

Как лучше сделать? Может есть другие способы?
  • Вопрос задан
  • 3045 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ну раз такая ситуация, то я бы Вам посоветовал использовать транзакции в PDO:
www.php.net/manual/ru/pdo.transactions.php

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

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

Похожие вопросы