MySQL - Найти записи, которые ссылаются на указанный индекс - PullRequest
0 голосов
/ 04 апреля 2010

Итак, у меня есть система бронирования, где у меня есть таблица 'lesson_type_id' в качестве PK. У меня есть ограничение здесь, поэтому я не могу удалить тип урока, если есть заказы для этого типа урока.

Я хотел бы иметь возможность определить, упоминается ли на этот lesson_type_id какие-либо записи в таблице бронирований (или любой другой таблице в этом отношении), чтобы я мог изящно уведомить пользователя. то есть не будет выдано сообщение об ошибке mysql при попытке удаления записи.

Какой запрос я бы использовал для этого?

Спасибо.

Ответы [ 2 ]

1 голос
/ 04 апреля 2010
SELECT COUNT(*) FROM bookings WHERE lesson_type_id = ?your_id LIMIT 1

Результат равен 0, если нет ссылок, и 1, если они есть. Повторите это для любых других таблиц.

Другой способ - просто запустить запрос, отловить ошибку, проверить ее тип и отобразить уведомление, если это ошибка ограничения. Способ сделать это зависит от того, что вы используете для доступа к MySQL.

0 голосов
/ 04 апреля 2010
delete bookings from 
FROM bookings inner join
(
  select lesson_type_id, count(*) as c
  from bookings group by lesson_type_id
) bookings_count
on bookings.lesson_type_id = bookings_count.lesson_type_id
WHERE bookings.lesson_type_id = ? and bookings_count.c > 0

таким образом вы можете выполнить удаление и проверку за один шаг. Затем вы можете выбрать запись, которую вы хотите удалить сразу после этого (или использовать полученный rowcount ()), чтобы сообщить пользователю, что удаление было успешным или нет.

...