Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Voila, cela fait quelques temps que je découvre le Framework Zend et je voulais avoir quelques précisions sur la formulation de ma requête, en SQL elle passe bien, j'obtiens 1 résultat, et avec Zend j'obtiens pleins de redondances de 3 même résultat (tous car ce n'est qu'un jeu d'essai) :
$db = Zend_Db_Table_Abstract::getDefaultAdapter(); $select = $db->select(); $select->from('materiel', array('id_materiel', 'nom_materiel' , 'numero_service_tag', 'numero_contrat')) ->from('demande', 'id_demande') ->from('resultat_demande', 'id_resultat') ->from('utilisateur', 'id_utilisateur') ->where('utilisateur.id_utilisateur = "1"') ->join('demande', 'utilisateur.id_utilisateur = demande.id_demandeur', 'id_demande') ->join('resultat_demande', 'demande.id_demande = resultat_demande.id_demande', array('id_materiel', 'date_echeance')) ->where('resultat_demande.date_echeance < Now()') ->join('materiel', 'resultat_demande.id_materiel = materiel.id_materiel', '*');
Tandis qu'avec la requête SQL suivante cela marche ...
SELECT mat.nom_materiel, mat.numero_service_tag, mat.numero_contrat FROM resultat_demande res, materiel mat, utilisateur uti, demande dem WHERE uti.id_utilisateur = dem.id_demandeur AND dem.id_demande = res.id_demande AND res.id_materiel = mat.id_materiel AND res.date_echeance < Now() AND dem.id_demandeur = 1
Je veux juste sélectionner mat.nom_materiel, mat.numero_service_tag, mat.numero_contrat, mais bon ..
Si quelqu'un à une idée .. je suis preneur !
Hors ligne
T'as essayé de faire
echo $select;
afin de voir si la requête SQL que va interprété le moteur db de ZF est identique que ta requête cité plus haut. Exécute là depuis ton phpmyadmin afin de voir combien de résultat tu obtiens.
Hors ligne
merci de ta réponse,
J'ai effectivement fais le echo Select et quand je le met dans PhpMyAdmin ben la surprise, il y a une redondance sur les champs selectionnés .. je ne comprend pas, je veux juste un résultat composé de
'id_materiel', 'nom_materiel' , 'numero_service_tag', 'numero_contrat'
Cependant il me répète les champs de toutes les tables et la sans clause where, ce qui me donne X résultats, je ne sais pas trop à quoi c'est dû, car les premières cellules (celles que je veux) sont toutes bonnes, car elles sont identiques mais répété à cause des résultats (non demandés) des autres tables ..
Voila ce que cela donne :
SELECT `materiel`.`id_materiel`, `materiel`.`nom_materiel`, `materiel`.`numero_service_tag`, `materiel`.`numero_contrat` , `demande`.`id_demande`, `resultat_demande`.`id_resultat` , `utilisateur`.`id_utilisateur`, `utilisateur`.`nom_utilisateur` , `demande_2`.*, `resultat_demande_2`.*, `materiel_2`.* FROM `materiel` INNER JOIN `demande` INNER JOIN `resultat_demande` INNER JOIN `utilisateur` INNER JOIN `demande` AS `demande_2` ON utilisateur.id_utilisateur = demande.id_demandeur INNER JOIN `resultat_demande` AS `resultat_demande_2` ON demande.id_demande = resultat_demande.id_demande INNER JOIN `materiel` AS `materiel_2` ON resultat_demande.id_materiel = materiel.id_materiel WHERE (utilisateur.id_utilisateur = 1) AND (resultat_demande.date_echeance < Now())
Dernière modification par xzen (05-05-2008 16:44:03)
Hors ligne
Bon je crois que je suis un petit peu à la masse avec les INNER JOIN mais bon ça va mieu maintenant, c'étais plus une erreur de ma part, à force de faire que des AND ...
Merci WhiteSpirit pour l'info sur le echo de select j'y avais pas pensé, ça ma beaucoup aidé
Hors ligne
Attention à ne pas mélanger INNER JOIN et LEFT/RIGHT OUTER JOIN
Hors ligne