Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/08/2007, à 12:41

glattering

[PHP/MySQL] Débutant: conversion idée->code

Bonjour à tous

(excusez moi d'avance pour les fautes de frappe ou les abreviation mais j'ai une main dans le platre...)

En résumé, pour occuper mon temps libre (arret de travail oblige) je me suis mis au php et mysql pour programmer une sorte de carnet d'adresse amelioré. 

Pour info, je n'ai jamais programmé autre chose que des algo traitement du signal en matlab et assembleur, pour vous dire comme la prog type serveur/client m'est inconnue! (mais bon, je suis pas debile, je sais apprendre wink c'est juste pour me situer).

Ma question:

j'ai une table de contact, Tb_contact avec un id par contact, une table de maisons, Tb_maison avec un id par maison, et une table qui associe un contact avec ses maisons ( un contact pouvant avoir plusieurs maisons et une maison pouvant etre habitée par plsieurs contact), Tb_habite qui contient les  contact_id et maison_id.

Lorsque j'edite les maisons d'un contact toto deja existant, au moment de mettre a jour la base de données une fois les modifs finies, je fais dans l'ordre:

1) je supprime toutes les entrées dans Tb_habite qui associent toto et des maisons, car juste apres, on va ajouter toutes les maisons (mises a jour) de toto a nouveau.

2) j'aimerais supprimer, suite à l'operation precedente, toutes les maisons de Tb_maison qui n'ont aucun habitant (je ne veux pas garder de maisons vides dans ma table c'est un choix perso)

3) j'ajoute toutes les maisons de toto dans Tb_maison

4) j'associe dans Tb_habite toto et ses nouvelles maisons

les points 1) et 3) sont ok, je sais faire.
1) qqch comme DELETE FROM Tb_habite WHERE Cont_Id = $this->id
3) une boucle sur chaque maison ou je fais INSERT INTO Tb_maison (adresse , etc) VALUES ($this->adresse, etc)

par contre, là ou je bute, c'est le point 2) surtout!!
si vous pouviez m'aider, ca serait super!

pour le point 4) c'est est ok sauf pour prendre en compte le cas ou la maison existe deja.*
en effet si je fais un INSERT INTO Tb_maison (adresse , etc) VALUES ($this->adresse, etc) mais que la maison existe deja, comment je fais pour recuperer l'id de cette fameuse maison qui existe deja pour ajouter l'asociation toto<->id de la maison qui existe deja dans Tb_habite?


Voila, dsl c'est peut etre un peu long comme question, alors si vous avez besoin de precisions, n'hesitez pas a me demander, je peux aussi vous compier coller des bouts de mon code.

Merci!

/glattering, crampe au doigt!


Membre de l'APRIL - « promouvoir et défendre le logiciel libre » -

Hors ligne

#2 Le 25/08/2007, à 13:12

alexduf

Re : [PHP/MySQL] Débutant: conversion idée->code

glattering a écrit :

2) j'aimerais supprimer, suite à l'operation precedente, toutes les maisons de Tb_maison qui n'ont aucun habitant (je ne veux pas garder de maisons vides dans ma table c'est un choix perso)

select m.id, count(h.id) as count from tb_maison m, tb_habite h where m.id = h.id (+) group by m.id

te retourne toutes les maison, ainsi que le nombre d'habitants par maison


donc :

select id from
(select m.id as id, count(h.id) as count from tb_maison m, tb_habite h where m.id = h.id (+) group by m.id)
where count = 0

te retourne toutes les maison vides

enfin :

delete from tb_maison where id = (
select id from
(select m.id as id, count(h.id) as count from tb_maison m, tb_habite h where m.id = h.id (+) group by m.id)
where count = 0
)

il doit certainement y avoir plus simple, mais au moins ca marchera ^^

[Edit]
Oui il y a plus simple

delete from tb_maison where id not in (select id_maison from tb_habite)

[/Edit]


glattering a écrit :

pour le point 4) c'est est ok sauf pour prendre en compte le cas ou la maison existe deja.

cela dépend de ta saisie. Si tu saisi à l'aide d'une liste déroulante, tu peux certainement récupérer une liste d'identifiants. Si tu saisi à chaque foi l'adresse la rue la ville etc, ca risque d'etre compliqué parcequ'il faut etre sûr de saisir la même chose à chaque fois.

Je sais pas si je suis très clair.

Dernière modification par alexduf (Le 25/08/2007, à 13:16)

Hors ligne

#3 Le 25/08/2007, à 13:52

glattering

Re : [PHP/MySQL] Débutant: conversion idée->code

super!
merci pour ta reponse alexduf! smile

je ne vais pas pouvoir tester ca tt de suite, mais surement plus tard aujourd'hui ou demain!

pour le point 4) je crois que j'ai bien compris ce que tu dis. En fait, je reecris les adresses (pas de liste deroulante), par contre, dans ma table Tb_maison, j'ai un id unique, mais egalement une clé unique, qqch comme le couple (adresse, code postal) qui doit etre unique, donc quand je tente l'INSERT, il "echoue" si (code postal, adresse) existe deja dans la table.
en fait je me rends compte que mon pb est plus de detecter que l'insert a echoué (que renvoie mysql dans ce cas là?) que de gerer le cas ou l'insert echoue.
j'espere a moin tour ne pas etre trop confus!

encore merci!


Membre de l'APRIL - « promouvoir et défendre le logiciel libre » -

Hors ligne

#4 Le 25/08/2007, à 14:00

alexduf

Re : [PHP/MySQL] Débutant: conversion idée->code

glattering a écrit :

en fait je me rends compte que mon pb est plus de detecter que l'insert a echoué (que renvoie mysql dans ce cas là?) que de gerer le cas ou l'insert echoue.
j'espere a moin tour ne pas etre trop confus!

Tu fais fausse route. Là en essayant un insert c'est un peu bourrin.
Fait simplement un select... Si tu as un résultat, tu ne fait pas d'insert et tu as ton id, sinon tu fais un insert. c'est bien plus propre ! ^^

Hors ligne

#5 Le 25/08/2007, à 18:52

glattering

Re : [PHP/MySQL] Débutant: conversion idée->code

tu sais que c'est pas bête ce que tu dis!:D

J'avoue que j'ai du mal à visualiser ce qui est bien de ce qui n'est pas bien en terme de sollicitation de la base de données (nombre, lourdeur des requetes etc)... mais je suppose que ça vient avec l'experience.

encore merci en tt  cas, je teste tout ça demain!


Membre de l'APRIL - « promouvoir et défendre le logiciel libre » -

Hors ligne

#6 Le 26/08/2007, à 15:09

glattering

Re : [PHP/MySQL] Débutant: conversion idée->code

bon alors j'ai testé tout ça, et ca marche nickel même si encore 2-3 trucs me chiffonnent (j'ai l'impression que mes requetes sont pas du tout optimisées :s)

merci beaucoup pour ton aide alexduf!


Membre de l'APRIL - « promouvoir et défendre le logiciel libre » -

Hors ligne

#7 Le 26/08/2007, à 15:29

alexduf

Re : [PHP/MySQL] Débutant: conversion idée->code

de rien, n'oublie pas de passer ton sujet en [Résolu]

Hors ligne

#8 Le 26/08/2007, à 15:52

glattering

Re : [PHP/MySQL] Débutant: conversion idée->code

en fait, si ça ne dérange pas trop les modos, je vais me le garder sous la main...:rolleyes:

disons: résolu pour l'instant.


Membre de l'APRIL - « promouvoir et défendre le logiciel libre » -

Hors ligne