2010-05-24 9 views
0

Je travaille sur un problème de base de données d'actifs. Je saisis des éléments dans une base de données. Chaque objet est un actif et possède des variables dans la table de ressources. Un objet est également un type d'actif. Dans cet exemple, le type est le serveur.Comment mettrais-je à jour ces entrées de table avec SQL et PHP?

Voici la requête pour récupérer toutes les données nécessaires:

SELECT asset.id 
,asset.company 
,asset.location 
,asset.purchaseDate 
,asset.purchaseOrder 
,asset.value 
,asset.type 
,asset.notes 
,server.manufacturer 
,server.model 
,server.serialNumber 
,server.esc 
,server.warranty 
,server.user 
,server.prevUser 
,server.cpu 
,server.memory 
,server.hardDrive 
FROM asset 
LEFT JOIN server 
    ON server.id = asset.id 
WHERE asset.id = '$id' 

J'assignez ensuite tous les résultats dans un seul variables php.

Comment écrire une requête/un script pour mettre à jour un actif?

+0

Je ne suis pas sûr de ce que vous demandez. Demandez-vous comment effectuer la mise à jour d'un actif? Quelles informations aurez-vous lors de votre mise à jour: 'id' de la table des ressources? Est-ce que 'id' est la clé primaire de la table de ressources? Si c'est le cas, la première mise à jour montrée par Amadan sera suffisante. – Thomas

Répondre

1

Puisque vous avez (probablement) un à plusieurs entre les actifs et les serveurs, vous devez les mettre à jour séparément:

UPDATE assets SET 
    company = '$company', 
    location = '$location', ... 
WHERE id = $asset_id; 

UPDATE servers SET 
    manufacturer = '$manufacturer', 
    model = '$model', .... 
WHERE $id = $server_id 

Vous devrez faire la deuxième requête n fois, où n est le nombre d'enregistrements de server associés à la asset.

En outre, j'espère que vous êtes prudent avec ces variables - nous ne voulons pas Bobby Tables ici.

MISE À JOUR:

OK, donc vous avez un à-peut-être-un dans plusieurs tables. Dans ce cas pourquoi utiliser LEFT JOIN du tout? Il ne devrait pas y avoir un server n'est pas déjà un asset, non? Quoi qu'il en soit, répondez de la tête:

UPDATE assets, servers 
SET 
    assets.company = ..., 
    servers.manufacturer = ... 
WHERE assets.id = $id 
AND servers.id = $id 
+0

Je peux montrer mon malentendu mais je n'ai pas de relation un à plusieurs. Un actif peut être un serveur, un ordinateur de bureau ou un ordinateur portable. Un actif ne peut pas être composé de nombreux serveurs, de nombreux ordinateurs de bureau ou de nombreux ordinateurs portables. –

0

Puisque vous avez une connexion 1-1 entre votre table de ressources et votre table de serveur. C'est essentiellement la même table. Si vous avez le contrôle sur la mise en page de votre base de données, je le repenserai.

Sinon, vous devrez faire deux appels de mise à jour, un à chaque table comme @Amadan vous a montré

+0

Comment envisageriez-vous de changer la structure de la base de données? Au lieu d'avoir une table "assets" avec la moitié des variables d'objets et ayant l'autre moitié dans la table "servers", devrais-je juste avoir une table "servers" avec toutes les variables? –