multi utilisateurs sql

multi utilisateurs sql - PHP - Programmation

Marsh Posté le 05-12-2005 à 15:26:58    

Salut a tous,
 
voila l'histoire j'ai plusieurs tables utilisateurs (clients, partenaires, ...) dont les utilisateurs doivent pouvoir se loguer par le meme formulaire.
Le probleme est que ne vois pas trop a quoi devrait resembler ma requete.
Soient client_t la table clients,
partenaire_t la table partenaires,
installateurs_t la table installateurs.
 
la requete:
$sql = "SELECT * FROM client_t cl, partenaire_t pa, installateurs_t ins
WHERE cl.pseudo='monpote'  
OR pa.pseudo='monpote'
OR ins.pseudo='monpote'";
 
Mais cette requete me renvoit plusieurs lignes de ces tables, sans tenir compte du pseudo. :heink:  
 
Merci de votre aide!  :jap:  
 
PS: ca urge ! lol


Message édité par bob007 le 05-12-2005 à 15:33:11
Reply

Marsh Posté le 05-12-2005 à 15:26:58   

Reply

Marsh Posté le 05-12-2005 à 15:39:00    

PROBLEME de SQL = SECTION SQL
 
 
Avec un or sans relier du tout les tables entre elles, tu demandes à la base de te retourner le produit cartésien de deux des trois tables à partir du moment où il y a pseudo qu'est égale à 'monpote' dans la troisiéme.
 
Là, soit c'est le même utilisateur obligatoirement dans les trois tables et il faut utiliser des "and", soit c'est le même dans une ou plusieurs tables et il te faut des jointures (table1 LEFT JOIN table2 on table1.colone1=table2.colone2), soit c'est une personne différente en fonction des tables et si tu demandes les même colones dans les trois tables alors tu peux faire un "union" (select patati from table1 where ... UNION select patati from table2 where ... UNION select patati from table3 where ... )

Reply

Marsh Posté le 05-12-2005 à 15:41:01    

ce ne serait pas mieux de faire une table 'utilisateurs' avec un champ "type" qui renverrait vers des tables "spécialisées (client, partenaire, ...) ?

Reply

Marsh Posté le 05-12-2005 à 15:45:48    

OKay désolé pour la section, effectivement ca serait mieux en SQL
 
Le probleme est effectivement une personne différente en fonction des tables mais c'est pas tout a fait les memes colones en fonctions des users. Le UNION marcherait tout de meme ?
 
art_dupond >> l'idée est bonne mais chaque utilisateur correspond a un process et c'est compliqué de mettre ta solution en place (et contraire a mon cahier des charges en plus!). Mais merci beaucoup!

Reply

Marsh Posté le 05-12-2005 à 15:52:57    

Le union n'est possible que si on demande un nesemble de colone identique. Par ensemble de colone identique, ca veut dire même nombre de colone et même type de donnée pour chaque colone par rapport à la même colone des autres tables.
Evidement, ca veut dire que si t'as des colones qui correspondent à rien dans les autres, il faudra soit ne pas les demander soit rajouter dans la liste des colones des autres requettes une colone contenant une valeur par défaut. Par exemple, si "select * from table1" retourne 6 colone et si "select * from table2" en retourne deux, pour que le union marche, il faudra faire (par exemple) un "select * from table1 union, select *, null as MaColoneEnPlus from table2" (null étant la valeur que contiendra la colone calculé nomé "MaColoneEnPlus" )
 
Je sais pas si je suis assez clair dans mes explications.

Reply

Marsh Posté le 05-12-2005 à 16:01:04    

ah ok. Je ne pense pas que ca soit la bonne solution alors.
As-tu une autre idée ?

Reply

Marsh Posté le 05-12-2005 à 16:03:30    

en fait je voudrais que ma requete me retourne une row de tout ce qu'il y a dans une des ces tables quand le pseudo est égal à 'monpote', qu'importe la table dans laquelle il la prend!

Reply

Marsh Posté le 05-12-2005 à 16:04:31    

Si tu peux pas faire un union, si tu peux pas utiliser de "and", alors il te reste plus qu'a faire une requette sur chaque table.

Reply

Marsh Posté le 05-12-2005 à 16:06:55    

aie. J'avais peur de ca!

Reply

Marsh Posté le 05-12-2005 à 16:16:02    

je sais que tu ne peux pas mais je voudrais juste avoir des avis ;)
 
 
alors je voyais ca comme ca:
 
 
une table juste pour l'authentification.
 
users:
login (unique)
password
table_type (table_partenaire, table_client, ...)
id_dans_table_type
 
 
 
une table par type (tu gardes tes tables actuelles)
 
table_partenaire
id
nom
...
 
 
pour le login, tu vérifies login/password.  
si c'est bon, stockes le type et l'id    et/ou    tu récupères les données utiles
 
Tu connais le type d'utlistateur, la table, et l'id de l'utilisateur -> tu peux continuer ton programme normalement
 
 
Lors de l'encodage des utlisateurs, il faut alimenter la table users. (mais c'est pas compliqué non plus. puis c'est plus facile de vérifier si ce login n'existe pas encore)
 
 
 
 
Je ne trouve pas ca très compliqué à mettre en place (en gros, deux petites requetes pour le login, et un requete supplémentaire lors de l'encodage des users)
 
Voilà, j'aimerais avoir l'avis des "gens" (je suis un peu neuneu: pas savoir si solution bancale ou pas) :jap:


Message édité par art_dupond le 05-12-2005 à 16:17:21
Reply

Marsh Posté le 05-12-2005 à 16:16:02   

Reply

Marsh Posté le 05-12-2005 à 16:19:13    

ouais ta solution tient debout, aucun probleme. Ca marcherait!

Reply

Marsh Posté le 05-12-2005 à 16:21:13    

ok merci :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed