requéte multi table [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 17-06-2008 à 17:53:05
péter la gueule de la personne qui a fait le MPD, rajouter un champs année dans la table et centraliser tous les enregistrements dans cette table.
Marsh Posté le 17-06-2008 à 18:05:08
ça me parait un peu brutal !
mais plus techniquement tu peux m'expliquer comment réaliser tout ça ?
merci !
Marsh Posté le 18-06-2008 à 10:29:11
A vue de nez, tu as des tables qui ont la structure suivante:
nom: 200X
champs:
Avec une table par année donc.
Et bien à la place tu créés une table TOTO comme ça
Et si tu as besoin d'une seule année tu rajoutes une condition dans ton select sur ce champs.
Du coup ton problème initiale devient:
Code :
|
Maintenant c'est pas encore parfait car tu vas vite avoir des doublons ( genre Pierre Dupont sur plusieurs années).
Le mieux sera donc de faire 2 tables:
Table Personne:
Table Inscription (je sais pas ce que tu gères, c'est au pif ce nom)
Ta requête deviendrait alors:
Code :
|
Si c'est pour un site internet, je te conseille également de te pencher sur les problèmes de SQL injection
Marsh Posté le 18-06-2008 à 10:51:07
trés interessant tout ça ! en fait j'ai fait un petit systéme d'inscription pour les patients de ma clinique. Les secrétaire médicales de l'établissement rentre le nom et le prénom et ça affecte automatiquement un numéro. Ce numéro est composé de YYYYMM-ID+1 ex : 200806-125
je vais t'expliqué pourquoi je fais une table par année. pour pouvoir incrémanter de 1 à chaque fois que les secrétaires rentre un nom et pour éviter d'avoir des doublons je me sers de l'autoincrémante de mon ID donc à chaque fois qu'elle rentre un patient je vérifie le dernier ID en cours je rajoute 1 et je l'intègre dans mon champ NUMÉRO. Donc tout ça marche très bien sauf pour la recherche c'est là que je demande de l'aide.
J'avais bien pensé à ne faire qu'une table avec l'année mais comment avoir un numéro qui s'incrémente de +1 à chaque nouvel enregistrement ?
et il fallait que chaque année ça reparte à 1 ! donc trés pratique de créer une table à chaque année
Marsh Posté le 18-06-2008 à 11:17:48
Tout ça traduit juste une méconnaissance du fonctionnement d'un SGBD et de l'utilisation de SQL en général.
sebinfo007 a écrit : trés interessant tout ça ! en fait j'ai fait un petit systéme d'inscription pour les patients de ma clinique. Les secrétaire médicales de l'établissement rentre le nom et le prénom et ça affecte automatiquement un numéro. Ce numéro est composé de YYYYMM-ID+1 ex : 200806-125 |
Super, donc si je viens le 25 mars pour me faire enlever 2 dents de sagesse et que je reviens 1 semaine plus tard pour en enlever 2 autres, je me retrouve avec 2 numéros?
Et si je fais cela a cheval sur 2 années, je me retrouve avec 2 numéros dans 2 tables différentes?
sebinfo007 a écrit : je vais t'expliqué pourquoi je fais une table par année. pour pouvoir incrémanter de 1 à chaque fois que les secrétaires rentre un nom et pour éviter d'avoir des doublons je me sers de l'autoincrémante de mon ID donc à chaque fois qu'elle rentre un patient je vérifie le dernier ID en cours je rajoute 1 et je l'intègre dans mon champ NUMÉRO. Donc tout ça marche très bien sauf pour la recherche c'est là que je demande de l'aide. |
Sauf que tu confonds identifiant ( la clé "technique" qui te permet de retrouver un enregistrement dans ta table ) et numéro ( la clé "métier" qui te permet de retrouver un patient dans ta clinique).
sebinfo007 a écrit : J'avais bien pensé à ne faire qu'une table avec l'année mais comment avoir un numéro qui s'incrémente de +1 à chaque nouvel enregistrement ? |
Une autre question serait : "Pour quelle raison avez vous besoin d'un numéro?" l'identifiant technique ne serait-il pas suffisant? La notion de année/mois dans le numéro a-t-elle une utilité ou bien c'était comme ça avant alors il faut que ça reste comme ça?
Quoi qu'il en soit, il y a moultes façons de faire autrement. Mais le choix dépend du besoin exact.
sebinfo007 a écrit : donc trés pratique de créer une table à chaque année |
Non c'est de la merde...
La seule raison qui pourrait pousser "eventuellement" à ça serait la volumétrie des données, mais même dans ce cas là on ne créé pas plusieurs tables mais un partionnement.
Marsh Posté le 18-06-2008 à 13:32:47
hum bon je vais tout expliqué du fonctionnement :
Ce systéme ne gére que le numéro attribué à un nouveau patient si le patient est déjà venu on le cherche dans notre logiciel métier et donc pas besoin de passer par mon script.
mon script ne sert qu'a attribuer un numéro à un nouveau patient qui n'est jamais venu.
le champ recherche est là au cas dans notre logiciel métier le numéro qui aurait du être attribué à été oublié auquel cas on passe par mon script on recherche le nom du patient et là on a le numéro. et on l'intégre au logiciel métier.
donc voila je cherche à créer un script qui me permettrait d'attribué un numéro unique à un patient avec une fonction recherche...
Marsh Posté le 18-06-2008 à 15:15:40
Citation : donc voila je cherche à créer un script qui me permettrait d'attribué un numéro unique à un patient avec une fonction recherche... |
Bon à partir de ton bout de code, je deduis que tu utilises mysql. Sur ce coup là, c'est pas forcément le meilleur choix car ce SGBD ne gère pas les séquences. Mais on va ruser...
Tu fais un table "patients" comme ça:
Code :
|
Et quand tu veux insérer un personne tu fais ça:
Code :
|
En remplaçant toto et tata par les valeurs que tu veux.
Tu n'auras alors qu'une table pour tous tes numéros et la recherche ne devrait plus te poser de problème.
<mode aparté>
sebinfo007 a écrit : hum bon je vais tout expliqué du fonctionnement : |
Juste pour être sur de bien comprendre, admettons je me rends dans ta clinique.
Receptioniste: "Bjr monsieur vous êtes déjà venu?"
Moi: "Non"
R: "Attendez je vous créé un numéro de dossier"
Autre cas:
receptioniste: "Bjr monsieur vous êtes déjà venu?"
Moi: "oui"
R: "Attendez je cherche votre numéro dans notre logiciel métier, alalala je le trouve pas ... l'informatique alors ... attendez je vais le chercher dans un autre outil (le tien) ... ça y est je l'ai".
Loin de moi l'idée de critiquer gratuitement ( car j'imagine très bien qu'il y a moultes contraintes dont tu ne nous a pas parler) mais tout de même, il semble possible de bien optimiser votre SI
</mode aparté>
Marsh Posté le 18-06-2008 à 15:41:05
Alors déjà ça ne fonctionne pas tout à fait comme ça on reçoit des dossiers, les patients ne viennent pas à l'accueil comme ça pour être hospitalisé. tout ce que je t'ai expliqué est en amont, nous somme un centre de rééducation.
et la création du numéro unique n'est pas fait à l'accueil mais par les secrétaires médicales qui sont 4. donc c'est 4 personnes qui ont chacune besoin d'un numéro unique à un instant T. le numéro que je génére est un numéro IPP c'est un numéro d'archive.
Chaque patient doit avoir un numéro IPP et pour éviter qu'il soit donné aléatoirement j'ai fait cet outil. Ce script ne sert qu'a avoir un numéro pour un nouveau patient. Notre logiciel métier qui est un ERP gére le dossier patient de AàZ
mon champ de recherche c'est dans la faible propabilité ou la secrétaire à oublié de reporter le numéro dans le dossier du patient.
mais je te rassure tout est bien ficelé.
Merci à toi
Marsh Posté le 17-06-2008 à 17:44:49
bonjour à tous,
voila j'ai fait un champ de recherche sur mon site et la recherche doit s'executer sur plusieurs table :
dans la requéte SQL je lui demande de chercher dans la table 2008 mais je voudrais qu'il cherche aussi dans la table 2009 et 2010..
Comment faire ?
merci à vous.
Sébastien