2011-11-30 1 views
0

J'ai 3 tables:comment supprimer de la table multiple

  1. Table events. Dans ce j'ai des champs tels que event_id, user_id, title, email, location, address, latitude, longitude, description, isapproved

  2. tableau event_time. Dans ce que j'ai champs show_id, event_id, start_date, start_time, end_date, duration, date, end_time

  3. Table category: id, cat_id, event_id

Je l'insertion de données en 3 tables de sorte que si un événement de event_id 5 est entré dans la table event alors les données correspondantes être rempli event_title et category. Lors du remplissage event_time table si les événements start_time est 2011-12-05 et end_date est 2011-12-07 alors la table event_time sera rempli de 3 lignes comme avec la même ID d'événement et une autre date:

show_id event_id start_date start_time end_date duration date   end_time 
11  5   2011-12-05 12:00:00 2011-12-07 03:00:00 2011-12-07 15:00:00 
10  5   2011-12-05 12:00:00 2011-12-07 03:00:00 2011-12-06 15:00:00 
9  5   2011-12-05 12:00:00 2011-12-07 03:00:00 2011-12-05 15:00:00 

Le tableau category sera entré en fonction de nombre de catégories sélectionnées dans la liste déroulante des catégories.

id cat_id event_id 
25 3 5 
24 5 5 

Maintenant, je veux supprimer l'événement de la base de données en fonction du choix de l'utilisateur. S'il veut supprimer l'événement de la date particulière alors seulement dans event_time il devrait être supprimé dans les événements, catégorie il devrait être là. Toutefois, si l'utilisateur souhaite supprimer un événement non basé sur une date, les données de toute la table doivent être supprimées.

<?php 
include_once("webconfig.php"); 
include_once("webdatabase.php"); 
$show_id = isset($_REQUEST['show_id'])?trim($_REQUEST['show_id']):""; 
$event_id = isset($_REQUEST['event_id'])?trim($_REQUEST['event_id']):""; 

if(isset($show_id)) 
{ 
$s="select * from event_time where event_id='$event_id'"; 
$num_rows = mysql_num_rows($s); 
die($num_rows); 
$exe=$db->query($s); 
if($db->row_count()==1) 
{ 
$sql ="Delete events,event_time,category from events join event_time join category   on(events.event_id=event_time.event_id and event_time.event_id=category.event_id) where event_time.show_id='$show_id'"; 
$exe=$db->query($sql); 
$successMsg = "deleted Successfully! . "; 
$xml = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml .= '<root>'; 
$xml .= '<delete>'; 
$xml .= '<status>True</status>'; 
$xml .= "<message>$successMsg</message>"; 
$xml .= '</delete>'; 
$xml .= '</root>'; 
echo $xml; 
} 
else 
{ 
$sql1 ="Delete event_time from event_time where event_time.show_id='$show_id'"; 
e=$db->query($sql1); 
$successMsg = "deleted Successfully! . "; 
$xml = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml .= '<root>'; 
$xml .= '<delete>'; 
$xml .= '<status>True</status>'; 
$xml .= "<message>$successMsg</message>"; 
$xml .= '</delete>'; 
$xml .= '</root>'; 
echo $xml; 
} 
} 
else 
{ 
$xml = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml .= '<root>'; 
$xml .= '<delete>'; 
$xml .= '<status>false</status>'; 
$xml .= "<message>no data found</message>"; 
$xml .= '</delete>'; 
$xml .= '</root>'; 
echo $xml; 
} 
?> 

c'est ce que j'ai écrit le code. Quelqu'un sait-il comment faire?

+0

Quelle est la base de données? Cela déclencherait-il une solution? –

Répondre

0

Vous devrez probablement faire tout cela dans votre code. Vous pouvez utiliser des déclencheurs si votre plate-forme de base de données le prend en charge, et vous devez également examiner les contraintes et les options de cascade. Par exemple, une contrainte «on delete cascade» traiterait automatiquement le cas où vous supprimez un événement, car il supprimerait les enregistrements associés dans event_time et category pour vous.

La solution la plus simple pour commencer est d'utiliser du code. Ainsi, dans votre application, déterminez ce qui doit être nettoyé et publiez les suppressions vous-même.

Pour supprimer tous les temps et informations sur l'événement pour un événement:

DELETE FROM event_time WHERE event_id = 5; 
DELETE FROM event WHERE event_id = 5; 
DELETE FROM category WHERE event_id = 5; 

Ou évidemment pour supprimer seulement les temps:

DELETE FROM event_time WHERE show_id = 23; 

Vous aurez besoin de gérer le cas où il n'y a qu'un seul temps, l'événement devrait-il être maintenu dans ce cas? C'est à toi de voir.

+0

merci beaucoup – Nithin

0

Toujours publier des instructions SQL DDL et INSERT pour les questions de ce type.

Il n'est pas clair si vous souhaitez supprimer des lignes uniquement à partir d'event_time, ou à partir de event_time et d'événements.

La suppression de lignes à partir de event_time est simple.

delete from event_time where event_id = (?) 

La meilleure façon de supprimer les lignes des deux événements et event_time, mais laisser les lignes dans la catégorie, est à

  • utiliser une contrainte de clé étrangère sur event_id dans event_time,
  • utiliser sur CASCADE SUPPRIMER dans cette clé étrangère, et
  • utilisation pas clé étrangère sur event_id dans la catégorie

Après cela, vous pouvez simplement supprimer une ligne des événements, et le moteur de base de données supprimera les lignes liées dans event_time.

delete from events where event_id = (?) 

Vous devez utiliser le moteur INNODB pour appliquer les contraintes de clé étrangère. Cela dit, il semble bizarre de laisser event_id 5 dans la table des catégories après l'avoir supprimé de toutes les autres tables.

Questions connexes