Page 1 sur 1

Problème array_puch BDD SQL

Posté : 01 juil. 2014, 16:58
par Fripou
Bonjour.
Je ne sais pas si je suis dans la bonne partie du forum car cela concerne aussi de la BDD et SQL
Alors voila j'ai un problème avec la fonction array_push.
En gros voici la requête SQL que je traite (attention elle est pas mal ^^) :
SELECT ticket.tn, ticket.title, ticket.create_time, ticket.change_time, ticket_state.name, ticket_priority.name, ticket.customer_user_id, ticket_type.name, ticket.freetext2
FROM ticket
INNER JOIN time_accounting ON ticket.id = time_accounting.ticket_id
INNER JOIN article ON time_accounting.article_id = article.id
INNER JOIN ticket_state ON ticket.ticket_state_id = ticket_state.id
INNER JOIN ticket_priority ON ticket.ticket_priority_id = ticket_priority.id
INNER JOIN ticket_type ON ticket.type_id = ticket_type.id
WHERE ticket.queue_id = 25
AND article.create_time BETWEEN '2014-06-15' AND '2014-06-17'
Je souhaite donc récupérer toutes les valeurs de mon SELECT dans des tableaux que j'ai défini. Le problème que j'ai est le suivant.
Ceci marche :
array_push($titre_ticket , $ticket['title']);
Ceci ne marche pas :
 array_push($etat_ticket , $ticket['ticket_state.name']);
Pourquoi ? Comment dois-je faire ?

Merci d'avance

Re: Problème array_puch BDD SQL

Posté : 01 juil. 2014, 17:08
par moogli
salut,


ticket_state.name n'existe pas dans le tableau.
pour t'en convaincre ajoute un var_dump($laVariableRésultatDuFetch);

utilise des alias pour les noms de colonnes cela sera plus simple.


il est impératif d'afficher les erreurs en développement.

pour cela, dans ton php.ini
- display_error = on
- error_reporting = E_ALL


@+

Re: Problème array_puch BDD SQL

Posté : 01 juil. 2014, 17:17
par Fripou
Merci de ta réponse.

J'ai fais :
$etat_test = "ticket_state.name";
Puis dans ma requête SQL j'ai testé :
$sql_ticket= "SELECT ticket.tn, ticket.title, ticket.create_time, ticket.change_time, ".$etat_test.", ticket_priority.name, ticket.customer_user_id, ticket_type.name, ticket.freetext2".
" FROM ticket".
" INNER JOIN time_accounting ON ticket.id = time_accounting.ticket_id".
" INNER JOIN article ON time_accounting.article_id = article.id".
" INNER JOIN ticket_state ON ticket.ticket_state_id = ticket_state.id".
" INNER JOIN ticket_priority ON ticket.ticket_priority_id = ticket_priority.id".
" INNER JOIN ticket_type ON ticket.type_id = ticket_type.id".
" WHERE ticket.queue_id = 25".
" AND article.create_time BETWEEN '2014-06-15' AND '2014-06-17'";
La requête marche toujours par contre ceci ne marche toujours pas :
array_push($etat_ticket , $ticket[$etat_test]);
echo " Etat : ".$etat_ticket[$nbticket];

Re: Problème array_puch BDD SQL

Posté : 01 juil. 2014, 17:29
par moogli
mwé,

var_dump($ticket); cel donne quoi ?

pour info : ça marche / ça marche pas ne veux rien dire, php n'as pas de pattes / jambes :)

je ne sais pas ce que tu utilise comme sgdb mais je sais que la tu as deux colonnes avec le même nom et que les noms de table ne sont pas utilisés dans les index des tables fournit par le *_fetch_*

donc il faut que tu utilise les alias SQL pour que cela fonctionne.

@+

Re: Problème array_puch BDD SQL

Posté : 01 juil. 2014, 17:44
par Fripou
Désolé je suis loin d'être un habitué du code :oops:
J'utilise une base de donnée mysql.

Alors le var_dump($ticket); me donne :
array(16) { [0]=> string(16) "2014061110000674" ["tn"]=> string(16) "2014061110000674" [1]=> string(54) "[xxx] Ticket 2000000921 - Modifs pour formulaire PO" ["title"]=> string(54) "[adixen] Ticket 2000000921 - Modifs pour formulaire PO" [2]=> string(19) "2014-06-11 17:20:03" ["create_time"]=> string(19) "2014-06-11 17:20:03" [3]=> string(19) "2014-06-23 08:10:59" ["change_time"]=> string(19) "2014-06-23 08:10:59" [4]=> string(5) "Ferm�" ["name"]=> string(15) "TMA - Evolution" [5]=> string(9) "2 Normale" [6]=> string(25) "[email protected]" ["customer_user_id"]=> string(25) "[email protected]" [7]=> string(15) "TMA - Evolution" [8]=> string(10) "2000000921" ["freetext2"]=> string(10) "2000000921" }

Et donc j'ai bien l'état qui s'affiche : string(5) "Ferm�"
Donc avec $etat_test = "ticket_state.name"; j'arrive bien à récupérer l'état.
Par contre array_push($etat_ticket , $ticket[$etat_test]); ne fonctionne pas.
J’essaierai demain de passer par des alias SQL qui me semble une bonne solution

Re: Problème array_puch BDD SQL

Posté : 01 juil. 2014, 19:36
par sirakawa
moogli
pour info : ça marche / ça marche pas ne veux rien dire, php n'as pas de pattes / jambes
Depuis quand les éléphants n'ont-ils pas de jambes? Il y avait déjà les ptits bâteaux...
Mais c'est vrai que "ca ne marche pas" est d'une précision qui dépasse l'approximation du poids d'un éléphant. en pesant une araignée..
pour ceux qui ont soif de précision:
l'araignée pèse le poids P à + ou - près le poids d'un éléphant
Je crois que je m'en vais écrire une extensionà PHP en ce sens...

Re: Problème array_puch BDD SQL

Posté : 01 juil. 2014, 20:39
par moogli
array(16) { [0]=> string(16) "2014061110000674" ["tn"]=> string(16) "2014061110000674" [1]=> string(54) "[xxx] Ticket 2000000921 - Modifs pour formulaire PO" ["title"]=> string(54) "[adixen] Ticket 2000000921 - Modifs pour formulaire PO" [2]=> string(19) "2014-06-11 17:20:03" ["create_time"]=> string(19) "2014-06-11 17:20:03" [3]=> string(19) "2014-06-23 08:10:59" ["change_time"]=> string(19) "2014-06-23 08:10:59" [4]=> string(5) "Ferm�" ["name"]=> string(15) "TMA - Evolution" [5]=> string(9) "2 Normale" [6]=> string(25) "[email protected]" ["customer_user_id"]=> string(25) "[email protected]" [7]=> string(15) "TMA - Evolution" [8]=> string(10) "2000000921" ["freetext2"]=> string(10) "2000000921" }
le résultat n'est pas cohérent pour un fetch_array, a moins que les doublons ne soit pas nommé.
Donc avec $etat_test = "ticket_state.name"; j'arrive bien à récupérer l'état.
Par contre array_push($etat_ticket , $ticket[$etat_test]); ne fonctionne pas.
non, d'après ton tableau c'est $ticket[4] qui te donne la valeur fermé (attention tu a un problème de d'encodage a priori).
il n'y a pas d'index ticket_state.name dans le tableau.

oui la solution des alias est la plus simple surtout que la requête l'est aussi et a peu de champs ;)

je ferais un truc dans le genre (en virant les choses inutiles comme inner qui est la propriété par défaut)
[mysql]
SELECT
t.tn,
t.title,
t.create_time,
t.change_time,
ts.name stateName,
tp.name priorityName,
customer_user_id,
tt.name typeName,
freetext2
FROM ticket t
JOIN time_accounting ON ticket.id = time_accounting.ticket_id
JOIN article ON time_accounting.article_id = article.id
JOIN ticket_state ts ON ticket.ticket_state_id = ticket_state.id
JOIN ticket_priority tp ON ticket.ticket_priority_id = ticket_priority.id
JOIN ticket_type tt ON ticket.type_id = ticket_type.id
WHERE t.queue_id = 25
AND article.create_time BETWEEN '2014-06-15' AND '2014-06-17'
[/mysql]

Re: Problème array_puch BDD SQL

Posté : 02 juil. 2014, 09:52
par Fripou
Tout de suite avec des alias il n'y a plus de problème ^^ je n'y avais vraiment pas pensé donc merci :priere: .
Pour l'encodage un petit mysql_query("set names 'utf8'"); à suffit.

Si j'ai d'autres problèmes je reviendrais :D

Re: Problème array_puch BDD SQL

Posté : 02 juil. 2014, 15:37
par moogli
Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.



merci :mrgreen: