Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je n'arrive pas a effectuer cette requête zend affiche un application error sans plus de détails alors que les erreurs sont affichées
SELECT * FROM tickets LEFT JOIN users_has_tickets ON tickets.id = users_has_tickets.tickets_id WHERE (users_has_tickets.users_login = "admin" AND tickets.type = "Ticket"||"ADM") OR (tickets.users_login = "admin" AND tickets.type = "Ticket") ORDER BY tickets.date ASC
voila a quoi ressemble mon code actuellement
$result = $this->fetchAll($this ->select() ->from('tickets') ->joinLeft('users_has_tickets', 'tickets.id = users_has_tickets.tickets_id') ->where('tickets.type = "Ticket"||"ADM"') ->where('users_has_tickets.users_login = ?', $login) ->orWhere('tickets.users_login = ?', $login) ->where('tickets.type = "Ticket"') ->order($order . " " . $met) );
le problème viens du de la ligne orWhere et du left join (quand je met les ligne en commentaire ma requête marche)
Je ne trouve pas mon erreur
Merci d'avance
EDIT: Solution pour ceux qui auraient le meme probleme:
$result = $this->fetchAll($this
->select()->setIntegrityCheck(false) //methode a appeler
->from('tickets')
->joinLeft('users_has_tickets', 'tickets.id = users_has_tickets.tickets_id')
->where('tickets.type = "Ticket"||"ADM"')
->where('users_has_tickets.users_login = ?', $login)
->orWhere('tickets.users_login = ?', $login)
->where('tickets.type = "Ticket"')
->order($order . " " . $met)
);
Dernière modification par Massou (02-11-2010 10:24:23)
Hors ligne
Salut,
ta requête semble correcte sauf au niveau de la dernière clause where où j'enlèverai le AND.
Il se met automatiquement donc tu dois avoir un doublon.
Peux-tu mettre des parenthèses dans ta requête pour bien voir ce que tu veux faire avec ton OR.
Affiche ta requête pour voir.
Dernière modification par Godzinho (29-10-2010 10:19:08)
Hors ligne
En effet erreur inattention de ma part.
Cependant ma requête ne marche toujours pas.
pas j’édite mon premier post affin de la corriger (dans mon code aussi)
Dernière modification par Massou (29-10-2010 10:28:00)
Hors ligne
Ma requette dans phpmyadmin:
SELECT * FROM tickets LEFT JOIN users_has_tickets ON tickets.id = users_has_tickets.tickets_id WHERE ( users_has_tickets.users_login = "admin" AND tickets.type = "Ticket" || "ADM" ) OR ( tickets.users_login = "admin" AND tickets.type = "Ticket" ) ORDER BY tickets.date ASC
avec ou sans parenthèses le résultat est le même
un screenshot :
Hors ligne
Je ne peux voir l'image que tu as mise.
Sinon, pour la requête, je pense qu'il faut que tu fasses comme sa :
$this ->select() ->from('tickets') ->joinLeft('users_has_tickets', 'tickets.id = users_has_tickets.tickets_id') ->where('tickets.type = "Ticket"||"ADM" AND 'users_has_tickets.users_login = $login') ->orWhere('tickets.users_login = $login AND 'tickets.type = "Ticket"') ->order($order . " " . $met)
Hors ligne
merci mais y'a des erreurs de parsing dans ce que tu m'a envoyé.
et même en concaténant les chaines toujours la même erreur.
Hors ligne
Fais un affichage de ta requête pour voir ce qui est généré.
Il doit manquer des guillemets ou autres dans ce que je t'ai mis.
Hors ligne
en fait je peut même pas afficher la requête.
Zend plante dans une des méthodes lors de la génération de la requête.
Hors ligne
Si tu as repris exactement ce que je t'ai mis c'est normal que sa plante.
Il y a des guillemets mal placés ou manquant.
Tu les as enlevés ou ajoutés ?
Hors ligne
ben j'ai modifie avec de la concatenation ca ne marche toujours pas
$this ->select() ->from('tickets') ->joinLeft('users_has_tickets', 'tickets.id = users_has_tickets.tickets_id') ->where('tickets.type = "Ticket"||"ADM" AND users_has_tickets.users_login =' . $login) ->orWhere('tickets.users_login =' . $login . 'AND tickets.type = "Ticket"') ->order($order . ' ' . $met)
Hors ligne
personne n'aurait une solution svp?
Edit apres multiple debugs j'ai le message d'erreut suivant :
Warning: Select query cannot join with another table in C:\Program Files (x86)\wamp\www\test\library\Zend\Db\Select.php on line 1345
Edit 2: probleme resolu par contre je ne sais aps pourquoi si quelqu'un sait a quoi sert cette methode: setIntegrityCheck(false)
je suis prenneur
Dernière modification par Massou (02-11-2010 10:25:29)
Hors ligne
D'où venait l'erreur alors.
Qu'as-tu changé ?
Hors ligne
L'objet Zend_Db_Table_Select est destiné à sélectionner des données sur une table précise. Des jointures peuvent être faites, mais il n'est pas possible de sélectionner des colonnes ne faisant pas partie de la table sous-jacente. Cependant, ceci aurait pu être utile dans certains cas, et l'objet Zend_Db_Table_Select possède une clause spéciale déverrouillant cette limitation. Passez la valeur FALSE à sa méthode setIntegrityCheck. Il est alors possible de sélectionner des colonnes hors table. Attention toutefois, l'objet row/rowset résultant sera verrouillé. Impossible d'y appeler save(), delete() ou même d'affecter une valeur à certains de ses champs. Une exception sera systématiquement levée.
Hors ligne