IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

php sql inner join blabla where blabla like


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut php sql inner join blabla where blabla like
    Bonjour,

    je suis entrain d'essayer de faire marcher ma requette depuis un certain temps. Pouvez vous me dire ce qui ne marche pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php $resultats=$bdd->query("SELECT dr_vehicles." . $services . " AS vehiclesservices,
                                dr.company AS drcompany,
                                dr.country AS drcountry,
                                dr_seats." . $services . " AS seatsservices,
                                dr_prices." . $services . " AS pricesservices,
                                dr_prices.minimum_" . $services . " AS pricesminimumservices,
                                dr_prices.disposal_" . $services . " AS pricesdisposalservices,
                                dr_prices.drid AS pricesdriverid,
                                dr_payment.cash AS paymentcash,
                                dr_luggage." . $services . " AS luggageservices
                            FROM dr
                            INNER JOIN dr_vehicles ON dr_vehicles.drid = dr.id
                            INNER JOIN dr_seats ON dr_seats.drid = dr.id
                            INNER JOIN dr_prices ON dr_prices.drid = dr_seats.drid
                            INNER JOIN dr_payment ON dr_payment.drid = dr_prices.drid
                            INNER JOIN dr_luggage ON dr_payment.drid = dr_luggage.drid WHERE '".$origin."' LIKE CONCAT('%',dr.country,'%')");
                          $resultats->setFetchMode(PDO::FETCH_OBJ);
                          while( $resultat = $resultats->fetch() ) { ?>
    Quand j'ai seulement un pays dans le champs "country" de la table "dr" ca marche bien, mais quand j'ai par exemple "France, Espagne" ca ne marche pas.

    En attente de votre aide.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Vous avez 2 gros soucis de conception dans votre table dr
    - une colonne ne devrait contenir qu'une et une seule valeur, jamais de liste, à ce titre "france, Espagne" est une hérésie (cf. les fondamentaux de merise, concept de première forme normale)
    - une table, hors domaine de valeur, ne devrait pas contenir de libellés, mais des codes : code pays de la France, de l'Espagne, etc... idéalement en s'appuyant sur les codifications internationales fournies par l'ISO. Vous récupérez le libellé si besoin par jointure vers la table DV des pays.
    De plus, une table ne comporte pas de champs, mais des colonnes

    Edit : en plus vous construisez votre jointure sur un prédicat like '%....', prédicat non indexable. Si votre table contient des volumes conséquents, les performances seront désastreuses

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Vous avez 2 gros soucis de conception dans votre table dr
    - une colonne ne devrait contenir qu'une et une seule valeur, jamais de liste, à ce titre "france, Espagne" est une hérésie (cf. les fondamentaux de merise, concept de première forme normale)
    - une table, hors domaine de valeur, ne devrait pas contenir de libellés, mais des codes : code pays de la France, de l'Espagne, etc... idéalement en s'appuyant sur les codifications internationales fournies par l'ISO. Vous récupérez le libellé si besoin par jointure vers la table DV des pays.
    De plus, une table ne comporte pas de champs, mais des colonnes

    Edit : en plus vous construisez votre jointure sur un prédicat like '%....', prédicat non indexable. Si votre table contient des volumes conséquents, les performances seront désastreuses
    Merci pour votre réponse.

    - j'aimerai bien avoir un pays ou villes par champs, mais si chaque utilisateur est opérationnel dans plusieurs villes? Chaque utilisateur est supposé être opérationnels dans plusieurs villes, donc je ne peux pas avoir 40 champs différents par ville pour chaque utilisateur. Si j'ai 100 utilisateurs ca ferait 4000 champs (ou lignes/rangées).

    C'est ma colonne "Pays" et "Villes" qui contient des champs où se trouve les noms.

    Comment utiliser une jointure sans like si cela n'est pas sécurisé? ou autre? En attente de vos explications.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par nike7414 Voir le message
    Merci pour votre réponse.

    - j'aimerai bien avoir un pays ou villes par champs, mais si chaque utilisateur est opérationnel dans plusieurs villes? Chaque utilisateur est supposé être opérationnels dans plusieurs villes, donc je ne peux pas avoir 40 champs différents par ville pour chaque utilisateur. Si j'ai 100 utilisateurs ca ferait 4000 champs (ou lignes/rangées).

    C'est ma colonne "Pays" et "Villes" qui contient des champs où se trouve les noms.

    Comment utiliser une jointure sans like si cela n'est pas sécurisé? ou autre? En attente de vos explications.
    Bonjour

    Avec ces questions, vous abordez les fondamentaux de la modélisation et de l'optimisation

    Concernant le 1er point, puisqu'un utilisateur est opérationnel dans plusieurs villes, vous devriez avoir
    - une entité utilisateur
    - une entité ville
    - une association ville - utilisateur répétée autant de fois que nécessaire

    Je vous recommande de consulter le forum consacré à la modélisation. Un modèle conceptuel mal conçu est très lourd de conséquences. De nombreux contributeurs sont très qualifiés et pourront vous aider dans votre démarche. Ce qu'il ne faut surtout pas faire, c'est négliger l'étape du modèle conceptuel, vous le payerez cash au quotidien
    Voici un point d'entrée sur ce sujet :
    http://www.developpez.net/forums/f25...thodes/merise/


    Pour le deuxième point, on entre dans les fondamentaux du SQL, une requête non optimisée plombe les temps de réponse, et pénalise tous les utilisateurs.
    Il y a également de nombreux posts sur ce site qui pourront vous aider. Recherchez les mots clefs "optimisation", "Sargable" vous trouverez plein de sujets
    Là encore, de nombreux contributeurs pourront vous assister.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Je reviens vers vous, car je constate que décidément vos tables sont très mal construites
    Ne prenez pas ombrage de mes remarques, c'est pour vous rendre service.

    • vous avez dans une même table, des données de signalétique (nom, prénom, etc...), des adresses et téléphone
      avec une telle modélisation, à chaque fois qu'un individu possède une nouvelle adresse ou un nouveau n° de téléphone, vous devez répéter sa signalétique
      Ceci est le fonctionnement d'un tableur, c'est inaccetable dans une de base de données
    • Je vois que vous avez une pléthore de colonnes varchar(255) non justifiées.
      Ce choix alourdit vos traitements (nécessité de gérer la longueur des colonnes dans les requetes) et vos perfs (en cas de mise à jour, si la longueur change, ça peut être lourd de conséquences)
    • vos tables possèdent des montants ou quantités sans unité de mesure, tout montant ou qté doit être qualifié par l'unité de mesure correspondante

    Cette liste n'est probablement pas exhaustive, vu que je ne connais pas votre application ni ses règles de gestion

    Bref, reprenez les conseils de mon post précédent avant de vous lancer dans les requetes, vous serez gagnant

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour

    Avec ces questions, vous abordez les fondamentaux de la modélisation et de l'optimisation

    Concernant le 1er point, puisqu'un utilisateur est opérationnel dans plusieurs villes, vous devriez avoir
    - une entité utilisateur
    - une entité ville
    - une association ville - utilisateur répétée autant de fois que nécessaire

    Je vous recommande de consulter le forum consacré à la modélisation. Un modèle conceptuel mal conçu est très lourd de conséquences. De nombreux contributeurs sont très qualifiés et pourront vous aider dans votre démarche. Ce qu'il ne faut surtout pas faire, c'est négliger l'étape du modèle conceptuel, vous le payerez cash au quotidien
    Voici un point d'entrée sur ce sujet :
    http://www.developpez.net/forums/f25...thodes/merise/


    Pour le deuxième point, on entre dans les fondamentaux du SQL, une requête non optimisée plombe les temps de réponse, et pénalise tous les utilisateurs.
    Il y a également de nombreux posts sur ce site qui pourront vous aider. Recherchez les mots clefs "optimisation", "Sargable" vous trouverez plein de sujets
    Là encore, de nombreux contributeurs pourront vous assister.
    Merci, en effet je comprends mieux grâce à ce cours! Je vais refaire toute ma structure.
    Donc dans l'association ville j'aurai
    id_utilisateur et id_ville. A chaque fois que l'utilisateur ajoute une nouvelle ville une ligne sera ajouté dans mon association.

    Mais si j'aimerai que l'utilisateur puisse ajouter des départements en plus des villes (pour être plus large). Il faudrait donc trouver une base de donnée de tous les départements et villes en France? Il n'y a pas un moyen plus simple grâce à Google Map ? A la place d'être obligé de tout stocker dans ma BDD.
    Imaginez que je veux être actif dans tous les pays d'Europe. Faudra t-il récupérer toutes les villes et départements/régions d'Europe?

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 899
    Par défaut
    Salut à tous.

    Citation Envoyé par nike7414
    je suis entrain d'essayer de faire marcher ma requette depuis un certain temps. Pouvez vous me dire ce qui ne marche pas?
    Il serait plus opportun de nous communiquer aussi les tables avec un jeu d'essai représentant le ou les problèmes que vous rencontrez.

    Une mauvaise conception de votre base de données peut engendrer des problèmes de performances et d'infaisabilité !

    Avant de commencer à développer, il faut valider le MCD.
    C'est en testant les requêtes que vous désirez faire que vous vous rendrez compte des erreurs de conception.

    Si vous désirez faire des recherches sur des mots, le mieux est d'utiliser "full text search" : http://dev.mysql.com/doc/refman/5.7/...xt-search.html

    @+

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.


    Il serait plus opportun de nous communiquer aussi les tables avec un jeu d'essai représentant le ou les problèmes que vous rencontrez.

    Une mauvaise conception de votre base de données peut engendrer des problèmes de performances et d'infaisabilité !

    Avant de commencer à développer, il faut valider le MCD.
    C'est en testant les requêtes que vous désirez faire que vous vous rendrez compte des erreurs de conception.

    Si vous désirez faire des recherches sur des mots, le mieux est d'utiliser "full text search" : http://dev.mysql.com/doc/refman/5.7/...xt-search.html

    @+
    Merci pour votre réponse.

    Je vous refait un copié de la requette et une photo de la BDD.
    Je veux bien optimiser mes tables
    Dans la table "chauffeurs" jai une colonne "city" dans laquelle j'aimerais afficher plusieurs villes où il est opérationnel.
    Dans driver_prices c'est des prix, donc des chiffres.
    Avec ma requette je selectionne tous les chauffeurs de la catégorie par exemple "ecocar" qui se situent dans la ville de Paris (par exemple).
    Le client cherche son addresse à l'aide de google autocomplete api, quand il cherche par exemple "165 Boulevard Haussmann, Paris, France" le chauffeur contenant "Paris, Courbevoie, Levallois, Versailles, Colombes" dans sa colonne "ville" devrait apparaitre dans la liste. Cette chaine de caractères "Paris, Courbevoie, Levallois, Versailles, Colombes" est enregistré dans un même champs.

    $services = ecocar; (par exemple - voir table "driver_vehicles")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     $resultats=$bdd->query("SELECT driver_vehicles." . $services . " AS vehiclesservices, 
                                chauffeurs.company AS chauffeurscompany, 
                                chauffeurs.city AS chauffeurscity,
                                driver_seats." . $services . " AS seatsservices, 
                                driver_prices." . $services . " AS pricesservices, 
                                driver_prices.minimum_" . $services . " AS pricesminimumservices, 
                                driver_prices.disposal_" . $services . " AS pricesdisposalservices,
                                driver_prices.driverid AS pricesdriverid, 
                                driver_payment.cash AS paymentcash, 
                                driver_luggage." . $services . " AS luggageservices
                            FROM chauffeurs
                            INNER JOIN driver_vehicles ON driver_vehicles.driverid = chauffeurs.id
                            INNER JOIN driver_seats ON driver_seats.driverid = chauffeurs.id
                            INNER JOIN driver_prices ON driver_prices.driverid = driver_seats.driverid
                            INNER JOIN driver_payment ON driver_payment.driverid = driver_prices.driverid
                            INNER JOIN driver_luggage ON driver_payment.driverid = driver_luggage.driverid 
                            ");
                          $resultats->setFetchMode(PDO::FETCH_OBJ);
                          while( $resultat = $resultats->fetch() ) { ?>
    Voici les screenshots de ma BDD:

    Nom : chauffeurs phpmyadmin.jpg
Affichages : 998
Taille : 92,2 Ko
    Nom : driver_prices phpmyadmin.jpg
Affichages : 1027
Taille : 105,2 Ko
    Nom : driver_vehicles phpmyadmin.jpg
Affichages : 1056
Taille : 77,0 Ko

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 899
    Par défaut
    Salut nike7414.

    Citation Envoyé par nike7414
    Je vais refaire toute ma structure.
    C'est plus qu'indispensable, c'est primordiale d'avoir une bonne conception de sa base de données. Cela vous évitera beaucoup de problèmes.

    Citation Envoyé par nike7414
    Donc dans l'association ville j'aurai id_utilisateur et id_ville. A chaque fois que l'utilisateur ajoute une nouvelle ville une ligne sera ajouté dans mon association.
    Au préalable, la ville doit exister dans la table parente des villes.
    En effet, une solution est de faire une table association "utilisateurs - villes" afin de conserver la souplesse à l'usage.

    Citation Envoyé par nike7414
    Mais si j'aimerai que l'utilisateur puisse ajouter des départements en plus des villes (pour être plus large).
    Un département, ce n'est pas une ville. Il faut revoir la signification de votre table "villes".
    Il y a comme un flou dans ce que vous essayez de faire. Pourquoi ne pas définir des zones géographiques ?
    Car si vous devez saisir des villes, il y en a des tas en Europe.
    Et puis département, cela n'existe qu'en France. En Allemagne, on parle de Land (ou Bundesland en allemand) qui ne sont pas départements mais des régions.
    Le concept département va plus ou moins disparaître, pour être remplacé par des régions. Et ailleurs, cette conception (département ou région) n'existe pas toujours.

    Citation Envoyé par nike7414
    Il faudrait donc trouver une base de donnée de tous les départements et villes en France?
    Voulez-vous associer départements et villes dans la même table ??? Il faudra revoir votre copie.

    Une table parente Département. Une table enfant Villes. Mettre une clef étrangère entre ces deux tables.
    Puis définir des tables associations, l'une entre département et utilisateur et une autre entre ville et utilisateur.
    Si c'est juste pour faire un découpage géographique, ce n'est pas ce qu'il y a de mieux à faire.

    Citation Envoyé par nike7414
    A la place d'être obligé de tout stocker dans ma BDD.
    Il doit exister sur le net des listes à télécharger. Mais vous devrez faire la mise en forme.
    Vous êtes obligé de stocker vos informations dans des tables si vous voulez définir des relations entre utilisateur et ville/département.

    Citation Envoyé par nike7414
    Imaginez que je veux être actif dans tous les pays d'Europe.
    J'image que vous allez créer une usine à gaz.

    Comment allez-vous définir et distinguer "Valence" en France et "Valence" en Espagne ?

    Avant de partir tête bèche dans ce genre de conception, il faut commencer par définir vos besoins réels.
    Bien que ce soit quelques idées en vrac, le mieux est de s'adresser à FSMREL pour tout ce qui concerne la modélisation merise.
    Ce forum est consacré à des problèmes techniques concernant MySql.

    @+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut nike7414.


    C'est plus qu'indispensable, c'est primordiale d'avoir une bonne conception de sa base de données. Cela vous évitera beaucoup de problèmes...
    Bonjour Artemus24,

    J'ai essayé dans la partie conception de BDD dans ce forum, mais je n'ai eu aucune réponse: http://www.developpez.net/forums/d15...onception-bdd/

    J'ai modifié la structure de ma base de donnée à l'aide des cours sur ce site. Comme vous voyez sur la capture d'écran ci-dessous chaque ville est liée à une catégorie de prix. Le transporteur rentre ses prix qui sont catégorisés par type de véhicule, puis à la zone où il souhaite transporter des clients (soit des villes, des départements, des régions ou dans tout le pays). Les villes sont soient liées à des départements ou à des régions (les villes dans les autres pays d'Europe ne sont pas liés à des départements, mais à des régions).

    Ci-dessous capture d'écran de la BDD avec les prix, les villes et les départements uniquement:

    Nom : price-city-departement.png
Affichages : 999
Taille : 86,5 Ko


    Ci-dessous capture d'écran de la BDD avec les prix, les villes, les départements, les régions et les pays :

    Nom : price-city-departement-region-country.png
Affichages : 1227
Taille : 131,3 Ko


    Ci-dessous capture d'écran des réservations. Je n'ai pas réussi à mettre TIME() pour l'heure de prise en charge du client ("pickuptime" et "returntime"), donc j'ai laissé VARCHAR... Je recois l'erreur "TIME() contains errors and cannot be accepted. The previous value is kept instead.", comment ca se fait vous pensez?
    Le chauffeur peut rentrer différentes marques de véhicules pour différentes catégories de véhicules dans "driver_vehicles", avec le nombre de bagages et de places disponibles dans chaque catégories de véhicules.
    La table "driver_payment" correspond aux types de paiements acceptés par le chauffeur pour tous ses services.
    "vehicle" dans "transfers_booking" correspond au véhicule que le client a choisie pour ce transfert (si jamais il veut en choisir un). Et "accepted" indique si un chauffeur a accepté cette course.

    Nom : transfer-booking.png
Affichages : 1019
Taille : 90,7 Ko


    Vous avez des conseils encore pour améliorer encore la structure ?

    En attente de votre réponse.

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par nike7414 Voir le message
    J'ai essayé dans la partie conception de BDD dans ce forum, mais je n'ai eu aucune réponse: http://www.developpez.net/forums/d15...onception-bdd/
    Je vois qu'au contraire Fsmrel vous a répondu.
    Vous avez de la chance car FsmRel est non seulement un contributeur très averti, mais qui en plus éclaire toujours ses propos avec des exemples, références et schémas.

    Donc, pour la partie conception, qui est un prérequis aux questions purement SQL, il est préférable de continuer dans la section consacrée

    Revenez ensuite dans la présente section quand vous en serez à la phase de réalisation

  12. #12
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 899
    Par défaut
    Salut nike7414.

    Vous tombez mal, je ne suis pas du tout un spécialiste de Merise. Et concevoir un MCD prend énormement de temps.
    Et en plus, c'est à l'usage que l'on se rend compte des mauvaises définitions de son MCD, surtout en faisant le MCT.

    Je préfère plutôt répondre à des questions techniques !

    Citation Envoyé par nike7414
    Je n'ai pas réussi à mettre TIME() pour l'heure de prise en charge du client ("pickuptime" et "returntime"), donc j'ai laissé VARCHAR...
    A quel niveau ? Dans le MCD ou dans le DDL ? En Mysql, il suffit de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    heure_arrivee TIME not null
    Et votre heure doit être au format : '15:35:17'. Ce sont les ':' qui sépare les heures, minutes et secondes.

    Citation Envoyé par nike7414
    Je recois l'erreur "TIME() contains errors and cannot be accepted. The previous value is kept instead."
    Il me faut un exemple pour comprendre votre problème.

    Juste une remarque.

    Je voie que dans votre MCD, vous utilisez un peu partout 'ID'.
    J'en déduis que c'est quelque chose de ce genre en MySql que vous allez définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `id`  integer unsigned not null auto_increment primary key
    Or ce 'ID' est un identifiant technique (1, 2, 3, ..., max) !
    Je veux bien que vous en mettiez un dans votre base de données, par exemple, à la table qui sert de point d'entrée à votre base de données.
    Surtout quand vous n'avez pas un identifiant logique qui peut venir se substituer à celui-ci. Mais pas partout !

    Avez-vous un manque d'imagination pour définir les noms de vos identifiants :
    --> matricule chauffeur, plaque minéralogique, numéro client, ...

    Quand je lis 'id', pour moi, cela signifie que votre identifiant à le même sens partout dans votre base de données. Or ce n'est pas le cas.

    Il ne faut pas oublier que vous devez définir le dictionnaire de données !
    La règle veut qu'un nom de colonne soit unique dans la base de données, c'est-à-dire qui a la même signification partout.
    Pour distinguer éventuellement, un identifiant d'une table, de la clef étrangère, on peut les préfixer.
    Exemple : numcli (clef primaire de la table client) et fk_numcli (clef étangère qui va pointer sur numcli).

    Voire même, mettre un préfixe pour désigner la table dont elle est originaire.
    Exemple: Tcli_numcli : table des clients. Wcli_numcli : view des clients.

    @+

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut nike7414.

    Vous tombez mal, je ne suis pas du tout un spécialiste de Merise.
    Pas de bol.. son schéma n'est pas en notation Merise mais en notation E/R !
    Exemple E/R :
    http://techieprincesa.com/2013/04/24...al-data-model/
    Exemple MERISE :
    http://sqlpro.developpez.com/cours/bddexemple/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Bonjour,

    J'ai finalement restructuré ma BDD.
    J'ai mon schéma ici, mais comme c'est la première fois que j'utilise ce genre de structure parent-enfant je ne sais plus comment insérer mes données.

    Nom : driver.png
Affichages : 951
Taille : 18,2 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    -- -----------------------------------------------------
    -- Table `hopdriver`.`driver`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `hopdriver`.`driver` (
      `driver_id` INT NOT NULL AUTO_INCREMENT,
      `description` LONGTEXT NOT NULL,
      `city_id` INT NOT NULL,
      PRIMARY KEY (`driver_id`),
      INDEX `fk_driver_city1_idx` (`city_id` ASC))
    ENGINE = MyISAM
    AUTO_INCREMENT = 19
    DEFAULT CHARACTER SET = latin1;
     
     
     
     
     
     
    -- -----------------------------------------------------
    -- Table `hopdriver`.`driver_client_detail`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `hopdriver`.`driver_client_detail` (
      `driver_client_detail_id` INT NOT NULL AUTO_INCREMENT,
      `email` VARCHAR(255) NOT NULL,
      `pass` VARCHAR(255) NOT NULL,
      `date_inscription` DATETIME NOT NULL,
      `first_name` VARCHAR(45) NOT NULL,
      `last_name` VARCHAR(60) NOT NULL,
      `company` VARCHAR(45) NOT NULL,
      `driver_id` INT NOT NULL,
      `client_id` INT NOT NULL,
      PRIMARY KEY (`driver_client_detail_id`, `driver_id`, `client_id`),
      INDEX `fk_driver_client_detail_driver1_idx` (`driver_id` ASC),
      INDEX `fk_driver_client_detail_client1_idx` (`client_id` ASC),
      CONSTRAINT `fk_driver_client_detail_driver1`
        FOREIGN KEY (`driver_id`)
        REFERENCES `hopdriver`.`driver` (`driver_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_driver_client_detail_client1`
        FOREIGN KEY (`client_id`)
        REFERENCES `hopdriver`.`client` (`client_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    J'ai fait des recherches et j'ai trouvé ceci: SELECT LAST_INSERT_ID()
    mais je n'ai aucun succès pour récupérer la valeur enregistré dans driver.driver_id et l'utiliser pour ma table enfant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO driver (description) VALUES ('asdad');
     
    SELECT LAST_INSERT_ID(driver_id) as last_id FROM driver;
     
    INSERT INTO driver_client_detail (email,pass,date_inscription,first_name,last_name,company,driver_id) VALUES ('ddd','pddddass','2015-03-30 22:06:23','dddd','lastdd_name','ddddd',last_id );
    Sinon j'ai essayé d'une différente manière directement dans le PHP, en utilisant lastInsertId(), mais je n'ai pas eu de grand succès. J'ai réussi à insérer que $req1 et $req2. http://www.w3schools.com/php/php_mys...ert_lastid.asp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
            $req1 = $bdd->prepare('INSERT INTO driver (description) VALUES (:description)');
          $req1->execute(array(
            'description'=>$description,
          ));
          $last_id = $bdd->lastInsertId();
          $req1->closeCursor();
     
     
          $req2 = $bdd->prepare('
            INSERT INTO driver_client_communicate (phone,driver_id) VALUES (:phone,:last_id)
            ');
          $req2->execute(array(
            'phone'=>$phone,
            'last_id'=>$last_id
          ));
          $req2->closeCursor();
     
     
          $req3 = $bdd->prepare('
            INSERT INTO driver_client_detail (email,pass,date_inscription,first_name,last_name,company,driver_id) VALUES (:driver_email,:pass,:date_inscription,:first_name,:last_name,:company,:last_id)
            ');
          $req3->execute(array(
            'driver_email'=>$driver_email,
            'pass'=>$pass,
            'date_inscription'=>$date_inscription,
            'first_name'=>$first_name,
            'last_name'=>$last_name,
            'company'=>$company,
            'last_id'=>$last_id
          ));
          $req3->closeCursor();
    Vous aurez une meilleure solution peut être?
    Merci d'avance.

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    C'est ballot, il y a un cartouche qui se superpose au MCD adresse le rendant quasi illisible

  17. #17
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 899
    Par défaut
    Salut Escartefigue.

    Tu travailles encore avec MSIE11 ??? Mais tu es sous quel OS ?
    Le dernier navigateur de chez Microsoft se nomme EDGE. Il est installé avec Windows 10.



    Sous Edge, tu fais un clic droit sur l'image.
    Tu sélectionnes "copier l'image".
    Tu ouvres une autre page et tu fais copier dans la barre des adresses.
    C'est légèrement plus long que sous Google Chrome ou Mozilla Firefox.

    @+

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Merci pour vos réponses.

    Je pense que ma question était plus technique, côté MySQL. Pour les relations entre les tables j'en discute déjà sur une autre partie du forum (si vous désirez y participer) : http://www.developpez.net/forums/d15...conception-bdd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    -- -----------------------------------------------------
    -- Table `choosedriver`.`driver`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `choosedriver`.`driver` (
      `driver_id` INT NOT NULL AUTO_INCREMENT,
      `description` LONGTEXT NOT NULL,
      `city_id` INT NOT NULL,
      PRIMARY KEY (`driver_id`),
      INDEX `fk_driver_city1_idx` (`city_id` ASC))
    ENGINE = MyISAM
    AUTO_INCREMENT = 19
    DEFAULT CHARACTER SET = latin1;
     
     
     
     
     
     
    -- -----------------------------------------------------
    -- Table `choosedriver`.`driver_client_detail`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `choosedriver`.`driver_client_detail` (
      `driver_client_detail_id` INT NOT NULL AUTO_INCREMENT,
      `email` VARCHAR(255) NOT NULL,
      `pass` VARCHAR(255) NOT NULL,
      `date_inscription` DATETIME NOT NULL,
      `first_name` VARCHAR(45) NOT NULL,
      `last_name` VARCHAR(60) NOT NULL,
      `company` VARCHAR(45) NOT NULL,
      `driver_id` INT NOT NULL,
      `client_id` INT NOT NULL,
      PRIMARY KEY (`driver_client_detail_id`, `driver_id`, `client_id`),
      INDEX `fk_driver_client_detail_driver1_idx` (`driver_id` ASC),
      INDEX `fk_driver_client_detail_client1_idx` (`client_id` ASC),
      CONSTRAINT `fk_driver_client_detail_driver1`
        FOREIGN KEY (`driver_id`)
        REFERENCES `choosedriver`.`driver` (`driver_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_driver_client_detail_client1`
        FOREIGN KEY (`client_id`)
        REFERENCES `choosedriver`.`client` (`client_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    J'ai eu du mal à trouver le signification de CONSTRAINT et INDEX dans le SQL ci-dessus.
    Apparement mon CONSTRAINT de driver_client_detail par exemple est faux et devrait être comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     CONSTRAINT `fk_driver_client_detail_driver_id`
        FOREIGN KEY (`driver_id`)
        REFERENCES `choosedriver`.`driver` (`driver_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_driver_client_detail_client_id`
        FOREIGN KEY (`client_id`)
        REFERENCES `choosedriver`.`client` (`client_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    Es-ce la même chose pour INDEX?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      INDEX `fk_driver_client_detail_driver_idx` (`driver_id` ASC),
      INDEX `fk_driver_client_detail_client_idx` (`client_id` ASC),
    J'ai posé aussi la même question sur http://stackoverflow.com/questions/3...th-foreign-key

    En attente de vos réponses.
    Bonne journée

  19. #19
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 899
    Par défaut
    Salut nike7414 .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CONSTRAINT `fk_driver_client_detail_driver1`
        FOREIGN KEY (`driver_id`)
        REFERENCES `choosedriver`.`driver` (`driver_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    Citation Envoyé par nike7414
    J'ai eu du mal à trouver le signification de CONSTRAINT et INDEX dans le SQL ci-dessus.
    Je suppose que vous parlez du nom de la 'foreign key' ou de 'index'.
    La seule règle concernant ce nom est qu'il soit unique dans toute la base de données.
    Donc il ne doit pas donner le nom d'une table, d'une colonne, d'une procédure stockée ...

    Si je reprends l'exemple de ci-dessus, le nom de votre table est `choosedriver`.`driver_client_detail`.
    Et comme il s'agit d'une 'foreign key', il suffit de mettre :
    --> fk pour dire que c'est la foreign key.
    --> le nom de la table
    --> le nom de la colonne dans la table.
    ce qui donne : "fk_driver_client_detail_driver_id".

    Mais si vous n'aimez pas les noms en rallonge, vous pouvez le baptiser 'fk_01'.
    Votre problème ne concerne pas ce nom.

    J'ai testé votre exemple. J'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1215 (HY000) at line 38: Impossible d'ajouter des contraintes d'index externe
    1) je crois que vous n'avez pas compris ce que représente une clef étrangère.
    Vous avez deux tables, l'une 'pere' et l'autre fils.
    Dans la table 'pere', votre clef primaire se nomme 'clef'.

    Dans la table 'fils', vous désirez une clef étrangère sur la table 'pere' pour la colonne 'clef'.
    Et bien sûr, dans la table fils, vous nommez cette colonne 'pere_clef'.

    Quelles sont les conditions pour que cela fonctionne correctement.

    a) la table 'pere' doit être créé et remplie avant la table 'fils'.

    b) 'clef' de la table 'pere' doit être une clef primaire.
    Ce qui implique que doit être unique, non null.

    c) la table 'fils' doit être créé après la table 'pere'.

    d) quand vous insérez une nouvelle ligne dans la table 'fils', la valeur de la colonne 'fils_clef' doit déjà exister dans la table 'pere'.

    2) les clefs étrangères ne fonctionnent que sur 'engine=innodb'.
    Votre table "`choosedriver`.`driver`" est en 'engine=myisam'. Donc c'est pas bon !

    3) le message d'erreur indique que vous faites références à une table qui n'est pas présente, au moment où vous créez la table `driver_client_detail`.
    Vous ne pouvez pas faire référence à une clef étrangère sur une table qui n'existe pas.

    Voici quelques modifications que j'ai apporté à votre base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    91
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `choosedriver`
    --------------
     
    --------------
    CREATE DATABASE `choosedriver`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    drop table if exists `driver`
    --------------
     
    --------------
    CREATE TABLE `driver`
    ( `driver_id`    INTEGER  NOT NULL AUTO_INCREMENT,
      `description`  LONGTEXT NOT NULL,
      `city_id`      INTEGER  NOT NULL,
      PRIMARY KEY (`driver_id`),
      INDEX `idx_01` (`city_id` ASC)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    drop table if exists `client`
    --------------
     
    --------------
    CREATE TABLE `client`
    ( `client_id`    INTEGER  NOT NULL AUTO_INCREMENT,
      `description`  LONGTEXT NOT NULL,
      PRIMARY KEY (`client_id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    drop table if exists `driver_client_detail`
    --------------
     
    --------------
    CREATE TABLE `driver_client_detail`
    ( `driver_client_detail_id` INTEGER      NOT NULL AUTO_INCREMENT,
      `email`                   VARCHAR(255) NOT NULL,
      `pass`                    VARCHAR(255) NOT NULL,
      `date_inscription`        DATETIME     NOT NULL,
      `first_name`              VARCHAR(255) NOT NULL,
      `last_name`               VARCHAR(255) NOT NULL,
      `company`                 VARCHAR(255) NOT NULL,
      `driver_id`               INTEGER      NOT NULL,
      `client_id`               INTEGER      NOT NULL,
      CONSTRAINT `PK_driver_client_detail` PRIMARY KEY (`driver_client_detail_id`, `driver_id`, `client_id`),
     
      CONSTRAINT `fk_01`
      FOREIGN KEY (`driver_id`)
      REFERENCES `driver` (`driver_id`)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
     
      CONSTRAINT `fk_02`
      FOREIGN KEY (`client_id`)
      REFERENCES `client` (`client_id`)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Et comme vous le constatez, il n'y a pas d'erreur.

    @+

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par Artemus24 Voir le message

    Quelles sont les conditions pour que cela fonctionne correctement.

    a) la table 'pere' doit être créé et remplie avant la table 'fils'.

    b) 'clef' de la table 'pere' doit être une clef primaire.
    Ce qui implique que doit être unique, non null.

    c) la table 'fils' doit être créé après la table 'pere'.

    d) quand vous insérez une nouvelle ligne dans la table 'fils', la valeur de la colonne 'fils_clef' doit déjà exister dans la table 'pere'.

    2) les clefs étrangères ne fonctionnent que sur 'engine=innodb'.
    Votre table "`hopdriver`.`driver`" est en 'engine=myisam'. Donc c'est pas bon !

    3) le message d'erreur indique que vous faites références à une table qui n'est pas présente, au moment où vous créez la table `driver_client_detail`.
    Vous ne pouvez pas faire référence à une clef étrangère sur une table qui n'existe pas.

    Voici quelques modifications que j'ai apporté à votre base de données :
    Merci, en effet j'avais oublié le "Unique" sur mes clefs primaires. J'ai aussi changé le 'engine=myisam' en 'engine=innodb'.
    Je n'ai plus d'erreur avec ceci, mais j'en ai une nouvelle avec "city_id".


    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`choosedriver`.`driver`, CONSTRAINT `fk_driver_city1` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)' in C:\wamp\www\choosedriver\driver\login.php on line 181
    ( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`choosedriver`.`driver`, CONSTRAINT `fk_driver_city1` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) in C:\wamp\www\choosedriver\driver\login.php on line 181

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2011, 15h12
  2. Probleme de SQL INNER JOIN WHERE
    Par korben06 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/06/2007, 18h18
  3. INNER JOIN et WHERE...=
    Par say dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/06/2005, 15h34
  4. INNER JOIN ou WHERE ...
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/10/2004, 13h14
  5. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo