Moteur de recherche pour base mysql

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 juil. 2005, 14:09

Comment tu fais pour renseigner les relations "concours_bande" et "concours_mode" ?
avec des INSERT, comme pour n'importe quelle table

physiquement c'est une table comme une autre
c'est d'un point de vue analyse que tu as :
- des entités (concours, bandes, modes), des objets en quelque sorte
- des relations : des tables qui relient les entités entre elle

quand tu enregistres un concours, que tu spécifies le mode, tu dois récupérer l'identifiant attribué au concours, connaitre l'identifiant du mode choisi, et insréer une ligne dans concours_mode

Eléphant du PHP | 174 Messages

12 juil. 2005, 21:36

Donc il faut que je modifie mon formulaire.php pour intégrer la commande INSERT. Elle aura pour but d'ajouter un chiffre qui sera incrémenté à chaque enregistrement au niveau des id_bande et id_mode.
:?
voilà ce que j'ai comme INSERT

Code : Tout sélectionner

$query_string="INSERT INTO concours (nom, date, report, lien, info) VALUES ('$nom', '$date', '$report', '$lien', '$info')"; $query=mysql_query($query_string); $query_string="INSERT INTO bandes (bande) VALUES ('$chainebande')"; $query=mysql_query($query_string); $query_string="INSERT INTO modes (mode) VALUES ('$chainemode')"; $query=mysql_query($query_string);
tu utilises quelle commande pour la récupe de l'identifiant ?

connaitre l'identifiant du mode, la c'est galére

inséré une ligne dans concours_mode
INSERT INTO concours_mode (id_concours) VALUES (la je suis perdu car il faut que ça s'incrémente je pense)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 juil. 2005, 09:07

tu ajoutes une bande et un mode à chaque création de concours ? tu ne réutilises jamais deux fois la même bande ou le même mode ?

l'incrémentation automatique se fait au niveau des tables concours, bandes et modes, quand tu rajoutes un nouvel enregistrement

concours_bande et concours_mode ne sont que des relations, des liaisons
donc elles doivent relier des entités qui existe, par leur numéro

quand tu viens d'insérer une ligne, avec un champ auto incrémenté, tu peux récupérer le numéro qui lui a été attribué :
- soit en SQL avec

Code : Tout sélectionner

SELECT LAST_INSERT_ID()
- soit en PHP avec la fonction mysql_insert_id()

prenons un exemple
tu as dans ta table modes :
1 - mode1
2 - mode2
3 - mode3

tu viens enregistrer un concours suivant ces étapes
A - insérer une ligne dans la table concours
B - récupérer l'identifiant qui lui a été attribuée automatiquement par une des deux commandes que je t'ai donné
C- récupérer l'identifiant du mode choisi (que tu peux connaitre si tu les avais listé dans une liste déroulante par exemple)
D - insérer une ligne dans concours_mode avec les deux numéros récupérés en B et en C

Pourquoi dis-tu que connaitre l'identifiant du mode c'est la galère
A moins que les modes changent souvent, normalement tu devrais en avoir quelques-uns de stocker, et ne faire qu'en choisir un parmis ceux-là
donc ce serait très facile de connaitre le numéro du mode choisi

Eléphant du PHP | 174 Messages

13 juil. 2005, 10:29

tu ajoutes une bande et un mode à chaque création de concours ?
Tout à fait
tu ne réutilises jamais deux fois la même bande ou le même mode ?
Tout à fait
  • Moi voila comment je vois le fonctionnement de la base
    concours | concours_bande | bandes
    id_concours | id_concours id_bande | id_bande
    1 | 1 - 1 | 1
ça correspond a un enregistrement
pour le second enregistrement les id de chaque tables auront l'id=2
normalement je pense que sa fonctionne comme cela

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 juil. 2005, 10:48

ben effectivement vu comme ça...

mais à ce moment là, si pour 1 concours tu as 1 et 1 seul mode... tu pourrais stocker le mode directement dans la table concours

je me demande si on va s'en sortir un jour... ça n'en finit plus :roll:

Eléphant du PHP | 174 Messages

13 juil. 2005, 10:55

Tout à fait d'accord lol dur dur, d'abord après je pense en rester là.
tu peux me dire si c'est à peu pres correct

Code : Tout sélectionner

$id_insertion = mysql_insert_id([$chainebande]); $id_insertion = mysql_insert_id([$chainemode]); $query_string="INSERT INTO concours_bandes (id_concours) VALUES ('$id_insertion')"; $query_string="INSERT INTO concours_modes (id_concours) VALUES ('$id_insertion')";

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 juil. 2005, 11:09

non ce n'est pas correct

mysql_insert_id ()te renvoie le dernier id auto_increment généré par la connexion courante ou la connexion précisée
ceci toutes tables confondues

donc
1 : insertion de concours
-> récupération de l'id attribué
$idConcours = mysql_insert_id();
2 : insertion du mode
-> récupération de l'id attribué
$idMode = mysql_insert_id();
3 : insertion dans concours_mode
$requete = "INSERT INTO concours_mode ('".$idConcours."', '".$idMode."')";
$exec = mysql_query($requete);
mais bon je le répète :
si pour 1 concours tu as 1 et 1 seul mode => tu peux stocker le mode directement dans la table concours
s'il est toujours différent => tu n'as plus besoin de la table modes, qui servait à ne pas répéter les identifiants et à pouvoir les afficher dans ton interface par exemple

Eléphant du PHP | 174 Messages

13 juil. 2005, 11:18

je vais faire une test avce des infos merci.
j'ai trois mode qui sont phonie télégraphie et mode digitaux qui peuvent
s'associé, comme pour la table bande.

ça existe cette commande :
$idMode = $idbande = mysql_insert_id();

il faut que je me trouve un livre php/mysql pour débutant qui regroupent tous ceux que je recherche.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 juil. 2005, 11:25

bon alors y'a un truc que je ne comprends pas

tu m'as dit que tu ajoutais un mode pour chaque concours, et que tu n'utilisais jamais le même mode

hors là tu me dis que tu en as 3, et que tu fais seulement des combinaisons !
donc si je comprend bien tu as pour chaque concours :
1, 2 ou 3 mode(s) parmis ceux-là

donc si c'est bien ça, voici ta table

Code : Tout sélectionner

Modes ------- 1 | phonie 2 | télégraphie 3 | modes digitaux
et pour chaque concours crée et chaque mode associé, tu insères une
ligne dans concours_mode

exemple : tu crées un concours qui a l'identifiant 5 et qui a comme mode phonie et télégraphie
dans "concours_mode" tu auras deux lignes :

Code : Tout sélectionner

concours_mode ------------------ 5 | 1 5 | 2
si tu en rajoutes un, qui prend donc l'identifiant 6, et qui n'a comme mode que "mode digitaux", tu auras une ligne en +

Code : Tout sélectionner

concours_mode ------------------ 5 | 1 5 | 2 6 | 3
mais là c'est vraiment du cours de modélisation... et le forum est pas super approprié pour reprendre tout de 0
ça existe cette commande :
$idMode = $idbande = mysql_insert_id();
oui, tu peux attribuer deux variables à la fois

Eléphant du PHP | 174 Messages

13 juil. 2005, 11:53

voilà ma table mode si je pars de ton principe
Modes
-------
1 | phonie
2 | télégraphie
3 | modes digitaux
4 | phonie, télégraphie
5 | phonie, modes digitaux
6 | phonie, télégraphie, modes digitaux
7 | télégraphie, modes digitaux

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 juil. 2005, 11:57

non, tu n'as pas compris le principe #-o

regarde ta table mode : tu as toujours les mêmes infos, qui se répètent, ça prend de la place pour rien non ?

ta table "modes" ne fait que recenser les POSSIBILITES de modes, soit :
1 - phonie
2 - télégraphie
3 - modes digitaux

RIEN de +

et c'est la table "concours_mode" qui va recenser les liens entre concours et modes, avec une ligne id_concours/id_mode pour chaque concours et chaque mode associé

le concours a 1 mode => 1 ligne
le concours a 2 modes => 2 lignes
le concours a 3 modes => 3 lignes

relis mon exemple, tu verras que ça ne correspond pas à ce que tu dis ;)

Eléphant du PHP | 174 Messages

13 juil. 2005, 12:06

OK
Pour un enregistrement avec deux mode :
ca dois etre ça

id_concours | id_concours-id_mode | id_mode
1 | 1 - 1 | 1 phonie
1 | 1 - 2 | 2 télégraphie

je dois partir à ce soir peu etre.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juil. 2005, 14:01

Modération : Si tu veux de l'aide : ouvre un 2nd fil.
Sinon, je doute que quelqu'un prenne la peine de lire tout ce thread jusqu'ici.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 juil. 2005, 14:08

ça c'est vrai que personne ne va venir jusqu'ici :lol:

maintenant la question est : sur quoi ouvrir le nouveau fil ?

il y a tellement de questions :P

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juil. 2005, 14:10

maintenant la question est : sur quoi ouvrir le nouveau fil
il y a tellement de questions :P
Sur chaque sujet :) ou bien sur un sujet précis : créer sa BDD, après cce sera remplir sa BDD