Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2011, 15h01   #1
Membre habitué
 
Inscription : juillet 2006
Messages : 664
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 664
Points : 132
Points : 132
Par défaut Insertion + clés etrangères

Bonjour à tous,

Dans le cadre d'un projet, je dois développer un site d'annonces immobilières.
Je dispose de 2 tables :

annonces_immobilier
Citation:
id_annonce_immobilier
id_annonce_immobilier_texte
proprietaire_annonce
departement
prix
surface
nb_pieces
annonces_immobilier_texte
Citation:
id_annonce_immobilier_texte
id_proprietaire_annonce_immobilier
sujet_annonce
body_annonce
Je ne connais malheureusement pas le procédure pour créer le lien clé primaire - étrangère suivant, sous PHPMyAdmin :
Code :
1
2
 
annonces_immobilier.id_annonce_immobilier_texte = annonces_immobilier_texte.id_annonce_immobilier_texte
- Autre point, les formulaires sont crées, mais comment gérer les insertions en PHP par la suite ? Quelles sont les requêtes à passer ?

Merci beaucoup
__________________
Le seul, le vrai Facebook killer
https://www.weetool.com
identifiant_bidon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h30   #2
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Code :
1
2
ALTER TABLE `annonces_immobilier` ADD FOREIGN KEY(`id_annonce_immobilier_texte `);
ALTER TABLE `annonces_immobilier_texte` ADD PRIMARY KEY(`id_annonce_immobilier_texte `)
Après vois pour le moteur de stockage, si tu prend innoDB, structure -> gestion des relations

Et tu affecte ta clé étrangère à la primaire.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 12h24   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Citation:
Je ne connais malheureusement pas le procédure pour créer le lien clé primaire - étrangère suivant, sous PHPMyAdmin
Utilise MySQL workbench et il le fera pour toi

http://wb.mysql.com

Cette question relève du forum MySQL.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 22h01   #4
Membre habitué
 
Inscription : juillet 2006
Messages : 664
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 664
Points : 132
Points : 132
Ok merci les gars. Par contre, comment ça ce passe au niveau des insertions ?
Je parle surtout des champs :
Code :
annonces_immobilier.id_annonce_immobilier_texte
et
Code :
annonces_immobilier_texte.id_annonce_immobilier_texte
.

Dois-je les renseigner dans mes requêtes INSERT ?
__________________
Le seul, le vrai Facebook killer
https://www.weetool.com
identifiant_bidon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 10h23   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Bien entendu. Et selon la contrainte exprimée par la clé étrangère, la requête INSERT ou UPDATE peut échouer.

Pense également à mettre des règles de suppression pour tes entrées (ON DELETE CASCADE par exemple signifie que les champs "fils" seront détruit lors que le parent sera supprimé).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h26   #6
Membre habitué
 
Inscription : juillet 2006
Messages : 664
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 664
Points : 132
Points : 132
Ok, Benjamin. Merci pour tes réponses mais il y a quelque chose qui m'échappe.

Imaginons qu'une personne renseigne une annonce.

Ce que tu préconiserai est la chose suivante :
je fais un
Code :
select count(*) from annonces_immobilier
pour savoir j'ai combien d'annonces (annonce_immobilier et annonce_immobilier_texte contiennent le même nombre d’éléments car à une annonce est associée un et un seul texte) puis je fais :

Code :
1
2
insert into annonces_immobilier values ("résultat de la requête précédente +1", "TOTO", prix, surface, ...);
insert into annonces_immobilier_texte values ("résultat de la requête précédente +1", sujet, body, ...);
avec TOTO = clé primaire de la table annonces_immobilier_texte correspondante -> donc "résultat de la requête précédente +1"

Ma question précédente résultait du fait que je pensais utiliser des auto increment (donc pas besoin de renseigner les clés primaire a chaque fois) mais si je le fais, je ne sais plus quoi mettre comme valeur a TOTO.
__________________
Le seul, le vrai Facebook killer
https://www.weetool.com
identifiant_bidon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 10h00   #7
Membre habitué
 
Inscription : juillet 2006
Messages : 664
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 664
Points : 132
Points : 132
Bon ok, comme l'a dit Benjamin, je déplace dans le forum MySQL
__________________
Le seul, le vrai Facebook killer
https://www.weetool.com
identifiant_bidon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 15h28   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Hello

Désolé j'étais absent du forum quelques temps (on a tous le droit de prendre des vacances )

Premier point: je ne vois pas pourquoi tu as besoin de séparer les données dans deux tables différentes (annonces_immobilier et annonces_immobilier_texte). A moins que tu n'aies vraiment un très grand nombre d'entrées (supérieur à plusieurs millions).

Deuxième point: évite les chaines de caractères (char, varchar ou pire text) en tant que clé primaire et préfère leur des entiers (int ou bigint conviennent très bien). Si tu as besoin de l'uncité des tuples sur un champ particulier, mets-lui un undex de type unique.

Citation:
Ma question précédente résultait du fait que je pensais utiliser des auto increment (donc pas besoin de renseigner les clés primaire a chaque fois) mais si je le fais, je ne sais plus quoi mettre comme valeur a TOTO.
Si tu n'en as pas besoin enlève-le tout simplement.

Voici à quoi peut ressembler une base de données d'agence immobilière:


Dont voici le SQL:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
 
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;
 
-- -----------------------------------------------------
-- Table `mydb`.`departements`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`departements` ;
 
CREATE  TABLE IF NOT EXISTS `mydb`.`departements` (
  `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `nom` VARCHAR(45) NOT NULL ,
  `numero` CHAR(2) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;
 
 
-- -----------------------------------------------------
-- Table `mydb`.`villes`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`villes` ;
 
CREATE  TABLE IF NOT EXISTS `mydb`.`villes` (
  `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `nom` VARCHAR(45) NOT NULL ,
  `departements_id` BIGINT(25) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_villes_departements` (`departements_id` ASC) ,
  CONSTRAINT `fk_villes_departements`
    FOREIGN KEY (`departements_id` )
    REFERENCES `mydb`.`departements` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
 
 
-- -----------------------------------------------------
-- Table `mydb`.`proprietaires`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`proprietaires` ;
 
CREATE  TABLE IF NOT EXISTS `mydb`.`proprietaires` (
  `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `nom` VARCHAR(45) NOT NULL ,
  `prenom` VARCHAR(45) NOT NULL ,
  `adresse` VARCHAR(45) NOT NULL ,
  `email` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `UNIQUE_N_P` (`nom` ASC, `prenom` ASC) )
ENGINE = InnoDB;
 
 
-- -----------------------------------------------------
-- Table `mydb`.`annonces`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`annonces` ;
 
CREATE  TABLE IF NOT EXISTS `mydb`.`annonces` (
  `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `proprietaires_id` BIGINT(25) NOT NULL ,
  `villes_id` BIGINT(25) NOT NULL ,
  `adresse` TEXT NOT NULL ,
  `nb_pieces` INT NOT NULL ,
  `surface` INT NOT NULL COMMENT 'en m²\n' ,
  `corp_annonce` TEXT NOT NULL ,
  `label` VARCHAR(90) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_annonces_proprietaires1` (`proprietaires_id` ASC) ,
  INDEX `fk_annonces_villes1` (`villes_id` ASC) ,
  INDEX `UNIQUE_A` (`label` ASC) ,
  CONSTRAINT `fk_annonces_proprietaires1`
    FOREIGN KEY (`proprietaires_id` )
    REFERENCES `mydb`.`proprietaires` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_annonces_villes1`
    FOREIGN KEY (`villes_id` )
    REFERENCES `mydb`.`villes` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
 
 
 
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Images attachées
Type de fichier : png annonces.png (18,8 Ko, 11 affichages)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h28.


 
 
 
 
Partenaires

Hébergement Web