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 prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 912
    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 912
    Par défaut
    Salut nike7414.

    J'ai modifié le nom de la base de données comme tu l'as demandé par MP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( ! ) 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
    Je pense que tu as essayé de remplir la table "`choosedriver`.`driver_client_detail`" avant de remplir la table "`choosedriver`.`driver`".

    Tu n'as tenu compte de mon 1-a).

    @+

  2. #2
    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
    Je pense que tu as essayé de remplir la table "`choosedriver`.`driver_client_detail`" avant de remplir la table "`choosedriver`.`driver`".

    Tu n'as tenu compte de mon 1-a).

    @+
    Artemus,

    J'ai bien créé et remplie la table "`choosedriver`.`driver_client_detail`" avant de remplir la table "`choosedriver`.`driver`":


    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
      // if there not then insert into db
        date_default_timezone_set('Europe/Madrid');
          $date_inscription = date('Y-m-d H:i:s');
     
            $first_name = $_POST['first_name'];
            $last_name = $_POST['last_name'];
            $company = "asdasdas";
            $phone = "asdasdas";
            $phonetwo = "asdasdas";
            $address = "asdasdas";
            $pass = md5($_POST['pass']);
            $description = " asdasdasd ";
            $phone = " 0712981289 ";
            $email = $_POST['email'];
     
            $req1 = $bdd->prepare('INSERT INTO driver (description) VALUES (:description)');
          $req1->execute(array(
            'description'=>$description,
          ));
          $last_id = $bdd->lastInsertId();
          $req1->closeCursor();
     
          $driver_id = $last_id;
          $req2 = $bdd->prepare('
            INSERT INTO driver_client_detail (email,pass,date_inscription,first_name,last_name,phone,phonetwo,address,company,driver_id) VALUES (:email,:pass,:date_inscription,:first_name,:last_name,:phone,:phonetwo,:address,:company,:driver_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();*/
     
             $req2->bindParam('email', $email, PDO::PARAM_STR);
        $req2->bindParam('pass', $pass, PDO::PARAM_STR);
        $req2->bindParam('date_inscription', $date_inscription, PDO::PARAM_STR);
        $req2->bindParam('first_name', $first_name, PDO::PARAM_STR);
        $req2->bindParam('last_name', $last_name, PDO::PARAM_STR);
        $req2->bindParam('phone', $phone, PDO::PARAM_STR);
        $req2->bindParam('phonetwo', $phonetwo, PDO::PARAM_STR);
        $req2->bindParam('address', $address, PDO::PARAM_STR);
        $req2->bindParam('company', $company, PDO::PARAM_STR);
        $req2->bindParam('driver_id', $driver_id, PDO::PARAM_INT);
        $req2->execute();

    J'ai aussi bien créé la table "driver" avant la table "city", mais ceux-ci n'ont pas de relations parent - enfant il me semble. Ce sont deux tables différentes.

    Nom : driver-city.png
Affichages : 160
Taille : 10,6 Ko

    Voici à nouveau ma table "driver":

    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
    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`),
      UNIQUE INDEX `driver_id_UNIQUE` (`driver_id` ASC),
      INDEX `fk_driver_city1_idx` (`city_id` ASC),
      CONSTRAINT `fk_driver_city1`
        FOREIGN KEY (`city_id`)
        REFERENCES `choosedriver`.`city` (`city_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    AUTO_INCREMENT = 19
    DEFAULT CHARACTER SET = latin1;
    J'ai rajouté "Unique" à driver_id. et j'ai mis en "engine = innodb".

  3. #3
    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 912
    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 912
    Par défaut
    Salut nike7414.

    Je viens de regarder à nouveau tes tables et tu as ajouter une clef étrangère sur la colonne "city_id" de la table "driver".
    Voici l'ordre de remplissage que tu dois respecter :

    1) Tu dois remplir en premier la table "choosedriver.city".
    Elle ne dépend de personne.

    2) Puis en deuxième, la table "choosedriver.client" ainsi que la table "choosedriver.driver".
    La table "driver" dépend de la table "city".
    La table "client" dépend de personne.

    3) Et enfin la table "choosedriver.driver_client_detail".
    Cette table dépend à la fois de la table "client" et de la table "driver".
    Et la table "driver" dépend de la table "city".

    @+

  4. #4
    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

    1) Tu dois remplir en premier la table "choosedriver.city".
    Elle ne dépend de personne.
    Artemus,

    Merci pour ces explications.

    Je dois obligatoirement remplir la table "choosedriver.city" ? J'ai pourtant mis une clef minimal 0. Un chauffeur peut habiter dans 0 ou plusieurs villes.
    Les clients peuvent ils aussi habiter dans 0 ou plusieurs villes.
    Ils n'inscrivent pas leurs ville dès l'inscription, mais peuvent le remplir, alternativement, après l'inscription.

  5. #5
    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 912
    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 912
    Par défaut
    Salut nike7414 .

    Citation Envoyé par nike7414
    Je dois obligatoirement remplir la table "choosedriver.city" ?
    Si tu mets une clef étrangère vers ta table "city", oui, tu dois remplir cette table.
    Sinon à quoi cela te sert-il de faire un test d'intégrité si tu n'en as pas besoin ?

    Citation Envoyé par nike7414
    J'ai pourtant mis une clef minimal 0. Un chauffeur peut habiter dans 0 ou plusieurs villes.
    Les clients peuvent ils aussi habiter dans 0 ou plusieurs villes.
    Si tu as mis la valeur "0" et que celle-ci existe dans la table "city", alors OUI, c'est correcte.

    Citation Envoyé par nike7414
    Ils n'inscrivent pas leurs ville dès l'inscription, mais peuvent le remplir, alternativement, après l'inscription.
    Ta colonne n'a pas une saisie obligatoire. La plupart du temps, elle ne sera pas renseignée.
    Ce qui singifie que tu vas mettre NULL, pour désigner l'absence de valeur.
    Et ce NULL n'est pas autorisé dans une clef étrangère.

    Alors deux choses l'une :
    ou bien, tu supprimes la clef étrangère sur cette colonne.
    ou bien, tu crées une valeur par défaut qui est renseignée dans ta table "city".

    @+

  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 Artemus24 Voir le message
    ou bien, tu supprimes la clef étrangère sur cette colonne.
    ou bien, tu crées une valeur par défaut qui est renseignée dans ta table "city".
    Artemus,

    Merci pour vos explications. J'ai tout simplement supprimé cette clef étrangère et j'ai gardé le champs "adresse" où on pourra insérer l'adresse complète avec ville, pays etc grâce à l'autocomplete Google Places API.


    Je voudrais savoir ce que vous suggérez pour ajouter les lieux d'activité des différents chauffeurs.
    Sur le site ils vont pouvoir ajouter différents lieux dans un même champs: des régions, des départements ou des villes.
    Voir l'exemple ci-dessous:
    Nom : Eurecab - périmètre dactivite.jpg
Affichages : 157
Taille : 58,4 Ko

    Pour ce faire j'hésite entre:

    1- ajouter moi même toute une sélection de villes, départements, régions externe pour chaque pays d'Europe pour que les chauffeurs puissent ensuite sélectionner leurs lieux d'activité des données pré-existantes dans ma base.

    2- laisser les chauffeurs ajouter eux même les villes, départements, régions pour chaque pays au fur et à mesure, à l'aide de Google Places API. Ces données s’ajouteraient au fur et à mesure dans ma base.


    1- Pour la première option je suis pas sûr de trouver une bonne base de donnée pour chaque pays avec tous les noms des villes et régions existantes - et dans la langue qui correspond (le site est traduit en plusieurs langues) ! J'utiliserai par exemple ceci https://jqueryui.com/autocomplete/#multiple pour que les chauffeurs puissent sélectionner chaque lieux pré-existantes dans mon serveur.

    2- Alors que pour la deuxième option je pourrais utiliser Google Places Api, exemple: http://crosscuttingconcerns.com/Auto...aphical-Places . Mais chaque villes, départements, régions ou pays s’inséreraient à la suite et il risque d'y avoir des doublons. Le bon point c'est que chaque lieu est mis à jour, n'importe quel lieu du monde y est, et dans toutes les langues.

    La deuxième option est peut être meilleure, vous en pensez quoi? Il y aurait un risque d'y avoir des doublons ou non? J'utiliserai les coordonnés GPS pour stocker ces donnés.

    J'ai créé ce MCD:

    Nom : places.png
Affichages : 151
Taille : 58,2 Ko

  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 912
    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 912
    Par défaut
    Salut nike7414.

    Citation Envoyé par nike7414
    1- ajouter moi-même toute une sélection de villes, départements, régions externe pour chaque pays d'Europe pour que les chauffeurs puissent ensuite sélectionner leurs lieux d'activité des données pré-existantes dans ma base.
    En procédant ainsi, vous pouvez tout contrôler ! Mais avez-vous la connaissance des ordres de missions de vos chauffeurs ?

    Citation Envoyé par nike7414
    2- laisser les chauffeurs ajouter eux même les villes, départements, régions pour chaque pays au fur et à mesure, à l'aide de Google Places API. Ces données s’ajouteraient au fur et à mesure dans ma base.
    D'après mon expérience, se décharger sur d'autres personnes pour faire le travail qui vous incombe, je ne sais pas si cela est opportun.
    Votre question ne concerne pas la gestion des bases de données, mais plus de l'organisation du travail au sein de votre entreprise.

    Vos chauffeurs, ont-ils la capacité de le faire ou encore l'envie ? C'est pas gagné de faire changer des habitudes de travail.
    Qui va contrôler l'exactitude de cette saisie ? Je pense que cela va créer plus de problèmes que d'avantage.

    Je ne suis pas la personne la plus qualifié sur ce forum pour répondre à des questions de modélisation des bases de données.
    Par contre, il m'est difficile de répondre au choix de outils pour la saisie des villes, car je ne les connais pas.

    @+

  8. #8
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour à toutes et à tous

    Deux petites remarques anodines...

    1 - Nous sommes sur le forum MySQL, et je suis toujours énervé de voir que certains postent des bouts de php.
    Ce qui est important est d'avoir une vraie requête sql et voir si elle fonctionne, si elle donne le résultat voulu.
    Après, tout le travail d'interfaçage avec php c'est autre chose. Et je pense que ça n'a pas trop à voir avec ce forum.

    2 - Dans la même veine, je suis un peu ennuyé que, la grande partie de cette discussion portant sur la conception de la base, elle ne soit pas dans le forum Merise. Vous avez dit que vous aviez posté, mais sans réponses. Il faut laisser le temps au temps....

    Pierre

  9. #9
    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 pier.antoine Voir le message
    1 - Nous sommes sur le forum MySQL, et je suis toujours énervé de voir que certains postent des bouts de php.
    Ce qui est important est d'avoir une vraie requête sql et voir si elle fonctionne, si elle donne le résultat voulu.
    Après, tout le travail d'interfaçage avec php c'est autre chose. Et je pense que ça n'a pas trop à voir avec ce forum.
    Désolé, je ferais attention à ne plus utiliser du php dans ce forum.

    Citation Envoyé par pier.antoine Voir le message
    2 - Dans la même veine, je suis un peu ennuyé que, la grande partie de cette discussion portant sur la conception de la base, elle ne soit pas dans le forum Merise. Vous avez dit que vous aviez posté, mais sans réponses. Il faut laisser le temps au temps....
    Depuis le temps et avec une relance, j'ai reçu pas mal de bonnes réponses sur le forum Merise et je ferai attention à ne plus poser de questions lié à la conception de la base sur ce forum MySQL.

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