Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 16h44   #1
Invité régulier
 
Inscription : avril 2008
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 34
Points : 5
Points : 5
Par défaut Concaténer résultats SQL.

Bonjour,

J'ai repris le projet d'un collégue qui est développer avec Zend.

J'ai une requête sur une table qui me retourne des photos en fonction d'un thème.

Le problème c'est que ma requête ce trouve dans une boucle for et je n'arrive pas à concaténer les résultats.

Voici le bout de code :

Code :
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
 
 
 
// Recherche des id des thèmes associés  -- Le tableau retourné est OK
$tab_th_associe = $this->searchCarteByThemeAssocie($id);
 
$tailletableau = sizeof($tab_th_associe);
 
        if (Zend_Registry::get('session')->theme && $id == 0)
            $id = Zend_Registry::get('session')->theme;
 
 
		$datas_sql = array();
		 for($i=0; $i<$tailletableau; $i++){
 
			$select = $this->_db->select()->from(array('ct' => 'Carte_Theme'), array('CT_CARTE'));
			$select->join(array('c' => 'Carte'), "c.CA_COMPTEUR=ct.CT_CARTE", array('CA_COMPTEUR'));
 
 
			if ($pays != NULL) {
				$select->where("c.CA_PAYS=?", $pays);
			}
 
			if ($departement != NULL) {
				$select->where("c.CA_DEPARTEMENT=?", $departement);
			}
 
			// Where en fonction de l id du théme
			$select->where("ct.CT_THEME=?",$tab_th_associe[$i] );
 
			$select->order('CA_ORDRE_FORMAT');
 
                        // Concaténation qui pose problème !!!
			$datas_sql .= $this->_db->fetchAll($select);		
 
		}//END FOREACH
Si je remplace "$tab_th_associe[$i]" directement par id ça fonctionne.
Le problème vient de cette ligne : $datas_sql .= $this->_db->fetchAll($select);
coson54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 17h55   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

As-tu essayé en remplaçant :
Code :
$datas_sql .= $this->_db->fetchAll($select);
par
Code :
$datas_sql[] = $this->_db->fetchAll($select);
En ligne 13 $datas_sql est déclaré comme étant un tableau
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 11h53   #3
Invité régulier
 
Inscription : avril 2008
Messages : 34
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 34
Points : 5
Points : 5
Merci de ta réponse le problème c'est qu'il me recrée des sous-tableau vide.

Exemple :

Code :
1
2
3
 
 
Array ( [0] => 120612 [1] => 110453 [2] => 113136 [3] => 93825 [4] => 110642 [5] => 38539 [6] => 50787   ...   [78] => 139622 [79] => 256993 [80] => Array [81] => Array [82] => Array [83] => Array [84] => Array [85] => Array [86] => Array [87] => Array [88] => Array [89] => Array [90] => Array [91] => Array [92] => Array [93] => Array [94] => Array [95] => Array [96] => Array [97] => Array [98] => Array [99] => Array [100] => Array [101] => Array )
Alors que moi je veux juste qu'il me met les résultats à la suite des autres tableau.
coson54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 12h16   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Bah il suffit de faire un test avant de rajouter les données et d'éjecter les résultats ne renvoyant rien, quelque chose du genre :
Code :
1
2
3
4
5
 
$data = $this->_db->fetchAll($select);
if ( ! empty($data)) {
   $datas_sql[] = $data;
}
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 13h01   #5
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Cette réponse est presque parfaite.

Il veut juste les données et pas toutes les métadonnées donc un toArray() sur le result

Code :
1
2
3
4
$data = $this->_db->fetchAll($select);
if ( ! empty($data)) {
   $datas_sql[] = $data->toArray();
}
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h17.


 
 
 
 
Partenaires

Hébergement Web