2010-04-04 5 views
0

J'ai donc un système de réservation où j'ai une table 'lesson_type' avec 'lesson_type_id' comme PK. J'ai une contrainte en place ici, donc je ne peux pas supprimer un lesson_type s'il y a des réservations faites pour ce lesson_type.MySQL - Trouver les entrées qui se réfèrent à un index spécifié

Je voudrais être en mesure de déterminer si ce type de lesson_id est référencé par des entrées dans la table des réservations (ou toute autre table d'ailleurs) afin que je puisse notifier l'utilisateur gracieusement. c'est-à-dire qu'il n'y a pas d'erreur mysql quand ils essaient de supprimer un enregistrement.

Quel type de requête est-ce que j'utiliserais pour ceci?

Merci.

Répondre

0
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 

de cette façon, vous pouvez faire la suppression et vérifier en une seule étape. Vous pouvez ensuite sélectionner directement l'enregistrement que vous souhaitez supprimer (ou utiliser le résultat rowcount()) pour informer l'utilisateur si la suppression a échoué.

1
SELECT COUNT(*) FROM bookings WHERE lesson_type_id = ?your_id LIMIT 1 

Le résultat est 0 s'il n'y a pas de références et 1 s'il y en a. Répétez cette opération pour toutes les autres tables.

Une autre méthode consiste simplement à exécuter la requête, à intercepter l'erreur, à vérifier son type et à afficher l'avis s'il s'agit d'une erreur de contrainte. La façon de faire cela dépend de ce que vous utilisez pour accéder à MySQL.