2010-07-30 8 views
1

comment puis-je faire les points suivants dans mysql (éventuellement en utilisant phpmyadmin):mysql: comment effectuer ces 2 tâches

1) Compte tenu d'une colonne existante de valeurs numériques (COLA), créer une nouvelle colonne avec des données texte (colB) et remplir automatiquement cette colonne avec "typeA" si colA = 0, et "typeB" si colB> 0?

2) Eu égard à la 2 tables utilisateurs et Docs suivants:

Tableau utilisateur a les colonnes "Nom d'utilisateur" et "UserID", Table Docs a colonnes "DocID", "Nom d'utilisateur" et UserID »(il est redondante, je sais)

le nom d'utilisateur de la colonne dans le tableau Docs est vide et je dois le remplir donné automatiquement le code d'utilisateur.

Quel est le code SQL pour ces 2 tâches?

grâce

Répondre

1

Pour la première, vous pouvez le faire:

UPDATE table_1 SET colB=IF(colA=0, 'typeA', IF(colA>0, 'typeB', '???')); 

Je ne sais pas s'il est ok comment vous indiquez dans votre question « et « typeB » si colB> 0 », parce que colB est la colonne où vous voulez écrire.

Pour votre deuxième question, vous devez utiliser une vue pour avoir le nom d'utilisateur dans le tableau Docs. Pour mettre à jour toute façon, vous pouvez utiliser les éléments suivants:

UPDATE Docs d SET Username=(SELECT Username FROM Users u WHERE u.UserID=d.UserId) 

Voici comment créer une vue qui contient le nom d'utilisateur:

CREATE VIEW Docs_view AS 
SELECT Docs.*, Users.Username 
FROM Docs 
LEFT JOIN Users ON Docs.UserID=Users.UserID; 

première goutte la colonne Username de Docs.

Maintenant, quand vous voulez sélectionner les documents, vous pouvez voir les noms d'utilisateur aussi:

SELECT * FROM Docs_view 

Et lorsque vous ajoutez un nouvel enregistrement, il suffit de spécifier UserID.

+0

C'est ce que je me demandais, voulait-il dire 'colA> 0'? –

+0

oui je voulais dire que, désolé, merci! – aneuryzm

1

Pour le premier, je pense que la réponse de True Soft devrait fonctionner. Pour la deuxième question, vous souhaiterez probablement utiliser des déclencheurs pour gérer le champ Nom d'utilisateur dénormalisé.


DELIMITER // 

CREATE TRIGGER Docs_after_insert_trigger AFTER INSERT ON Docs 
FOR EACH ROW 
BEGIN 
    IF (COALESCE(@DISABLE_TRIGGERS, 0) 1) THEN 
     UPDATE Docs 
      SET Username = (SELECT Username FROM Users where UserID = new.UserID) 
      WHERE DocID = new.DocID; 
    END IF; 
END // 

Créer un déclencheur similaire pour « après la mise à jour » changer tout « insert » à « mise à jour » si le Docs ne changera jamais et UserID Nom d'utilisateur, de sorte qu'ils soient mis à jour pour rester synchronisé.