2011-09-22 2 views
0

Comment insérer des mises à jour et supprimer des données de cases à cocher dans la table de base de données mysql. J'ai besoin de mysql query pour toutes les opérations. Je n'ai qu'une seule table de base de données pour ces opérations. Merci à l'avanceInsérer les données de mise à jour et supprimer les cases à cocher dans la base de données mysql

<input type="checkbox" name="sports" value="Cricket" /> Cricket 
<input type="checkbox" name="sports" value="Football" />Football 
<input type="checkbox" name="sports" value="Chess" />Chess 

Database Structure

ID ,NAME, AGE ,SPORTS(checkbox need to save) 
+0

Vous devriez avoir au moins 2 tables pour gérer cela. Avez-vous besoin de connaître les requêtes, les modèles ou les deux? –

+0

@Glide: J'ai besoin de requêtes et de modèles – karthick

Répondre

0

Comme Shef dit, vous avez besoin de ces 3 tables user, sport, user_sport

utilisateur

+----+----------------+-----+ 
| id | name   | age | 
+----+----------------+-----+ 
| 1 | Freddy Mercury | 65 | 
| 2 | Ian Gillan  | 66 | 
| . | .    | . | 
+----+----------------+-----+ 

le sport

+----+----------+ 
| id | sport | 
+----+----------+ 
| 1 | Cricket | 
| 2 | Football | 
| 3 | Chess | 
+----+----------+ 

user_sport

+---------+----------+ 
| user_id | sport_id | 
+---------+----------+ 
|  . |  . | 
+---------+----------+ 

Generate les cases à cocher avec ce php:

$sql = '/* Current User Sports */ 
SELECT 
    sp.id AS "sport_id" 
, sp.name As "sport" 
, us.user_id AS "checked" 
FROM sport AS sp 
LEFT JOIN user_sport AS us ON (
    sp.id = us.sport_id 
    AND user_id = '.$user_id.' 
) 
;'; 
$result = query($sql); 
foreach ($result as $row) { 
?> 
    <label> 
    <input type="checkbox" name="sports[<?php echo ($row['sport_id']) ?>]" checked="checked" /> 
    <?php echo ($row['sport']) ?> 
    </label> 
<?php 
} 

qui vous donnera ce HTML:

<input type="checkbox" name="sports[1]" checked="checked" />Cricket 
<input type="checkbox" name="sports[2]" checked="checked" />Football 
<input type="checkbox" name="sports[3]" checked="checked" />Chess 

La partie mise à jour

Première requête (Supprimer les valeurs du user_id courant $):

DELETE FROM user_sport WHERE user_id = $user_id; 

seconde requête (Insérez les nouvelles valeurs pour le user_id courant $):

$sql = 'INSERT INTO user_sport 
    (user_id, sport_id) 
VALUES 
    ('; 
$tmp = array(); 
foreach ($sports as $sport_id => $void) { 
    $tmp[] = "($user_id, $sport_id)" 
} 
$sql .= implode("\n, ", $tmp).' 
) 
;'; 

Cela peut fonctionner pour une insertion/mise à jour/supprimer

1

Vous devez modifier votre schéma de la table, il n'y a même pas dans le 1NF, la façon dont vous l'avez. Vous devriez créer un minimum de deux tables pour gérer cela, mais je suggérerais trois tables, compte tenu du fait que les sports vont se répéter.

Ceux-ci seraient vos tables ...

utilisateurs

id | name | age 

sport

id | sport 

user_sports

user_id | sport_id 

Ce seraient les requêtes ...

Lorsque vous générez les cases à cocher, vous sélectionnerez de la table sports, et en tant que valeur vous mettriez l'id du sport, pas le nom.

insérez Notez pour insérer, vous allez utiliser mysql_insert_id pour obtenir l'ID de l'utilisateur, qui sera utilisé sur la table de relation.

INSERT INTO users(name, age) VALUES('John', 22); 
INSERT INTO user_sports(user_id, sport_id) VALUES(mysql_insert_id(), 123); 

sélectionnez si vos cases contiennent l'identifiant du sport comme valeur

SELECT u.id user_id, u.name, u.age, s.sport 
     FROM users u 
INNER JOIN user_sports us 
     ON u.id = us.user_id 
     AND us.sport_id = 123 
INNER JOIN sports s 
     ON us.sport_id = s.id 

sélectionnez si vous avez le nom du sport

SELECT u.id user_id, u.name, u.age, s.sport 
     FROM users u 
INNER JOIN user_sports us 
     ON u.id = us.user_id 
INNER JOIN sports s 
     ON us.sport_id = s.id 
     AND s.sport = 'Football' 

effacer

DELETE u, us 
     FROM users AS u 
INNER JOIN user_sports AS us 
     ON u.id = us.user_id 
INNER JOIN sports AS s 
     ON us.sport_id = s.id 
     AND s.sport = 'Basketball' 
+0

Merci.Mais j'ai besoin de requête pour insérer, mettre à jour et supprimer les données de la case à cocher dans les tableaux – karthick

+0

@kathrick terreur: J'ai mis à jour ma réponse avec les requêtes. – Shef

Questions connexes