Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 29/04/2011, 15h15   #1
Membre à l'essai
 
Inscription : juin 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 30
Points : 20
Points : 20
Par défaut trier quand il y a plusieurs requêtes

Bonjour,

J'aimerais savoir comment trier globalement quand j'ai plusieurs requêtes.
Je m'explique: j'ai actuellement plusieurs requêtes sql imbiquées dans des boucles foreach, et avec un ORDER BY, j'arrive à bien trier à l'intérieur de chaque requête.
Mais je souhaite avoir un tri sur l'ensemble des requêtes.
Par exemple actuellement, mon code peut donner un résultat comme ceci

id
3 // première requête
4 // première requête
1 // deuxième requête
2 // deuxième requête

Or j'aimerais avoir

id
1
2
3
4

Ci dessous la structure simplifiée de mon 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
if (!empty($_POST["X1"])){
	$_SESSION['param1'] = $_POST["X1"];
}
if (!empty($_POST["X2"])){
	$_SESSION['param2'] = $_POST["X2"];
}	
if (!empty($_POST["X3"])){
	$_SESSION['param3'] = $_POST["X3"];
}
 
$sort_authorized = array('id','type_of_vehicle','vehicle_id','type_of_statistics','path');
$order_by = in_array(isset($_GET['order']),$sort_authorized) ? $_GET['order'] : 'id';
$order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC' ;
 
 
function sort_link { // fonction pour trier les données
 
}
 
if (isset($_POST["X1"]) {
 
foreach ( $_POST["X1"] as $param1) {
   foreach ( $_POST["X2"] as $param2) {
       foreach ( $_POST["X3"] as $param3) {
 
                 $sql ="SELECT * FROM my_table WHERE id = :param1 AND caract2 = :param2 and caract3 = :param3 ORDER BY '.$order_by.' '.$order_dir.';';
 
                $stmt -> execute(array('param1' => $param1,'param2' => $param2,'param3' => $param3, 'order_by' => $order_by, 'order_dir' => $order_dir));
     }
  }
}
 
 
 
 
}
else {
 
foreach ( $_SESSION['param1'] as $param1) {
   foreach ( $_SESSION['param2'] as $param2) {
       foreach ( $_SESSION['param3'] as $param3) {
 
                 $sql ="SELECT * FROM my_table WHERE id = :param1 AND caract2 = :param2 and caract3 = :param3 ORDER BY '.$order_by.' '.$order_dir.';';
 
                $stmt -> execute(array('param1' => $param1,'param2' => $param2,'param3' => $param3, 'order_by' => $order_by, 'order_dir' => $order_dir));
     }
  }
}
 
}
steph_arrow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 15h35   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
et sinon en une seule requete :

Code :
SELECT * FROM my_table WHERE id IN  (...,...,...) AND caract2 IN (...,...,...) and caract3 IN (...,...,...)  ORDER BY '.$order_by.' '.$order_dir.';';
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/04/2011, 16h18   #3
Membre à l'essai
 
Inscription : juin 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 30
Points : 20
Points : 20
Merci beaucoup boo64

Mais j'avais simplifié l'écriture
Il y a une recherche de regex dans ma requête et je ne sais pas la combiner avec qqch avec IN

Code :
1
2
3
4
5
6
 
 
$sql = 'SELECT * FROM results WHERE vehicle_id = :vehicle_id  AND type_of_statistics LIKE :param ORDER BY '.$order_by.' '.$order_dir.';';		
					$search = '%'.$quality_pos_value.'%'.$mode_value.'%';
					$stmt = $db -> prepare($sql);
					$stmt -> execute(array('vehicle_id' => $veh_id_value,'param' => $search));
steph_arrow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 16h33   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
le in doit se combiner avec le %
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/05/2011, 11h03   #5
Membre à l'essai
 
Inscription : juin 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 30
Points : 20
Points : 20
J'ai essayé votre réponse et ça marche après quelques modifications:

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
$veh_id_array = array();
		$veh_id_array = $_SESSION['recup_veh_id'];
		foreach ($veh_id_array  AS $key => $value) {
			$temp[] = '"'.$value.'"';
		}
		$veh_id_list = implode(",",$temp);
 
		$mode_array = array();
		$mode_array =  $_SESSION['recup_mode'];
 
		$quality_pos_array = array();
		$quality_pos_array = $_SESSION['recup_quality_pos'];
 
		$search = '';
		foreach ($mode_array as $mode_){
			foreach ($quality_pos_array as $quality_pos_){
				$search = $search."type_of_statistics LIKE '%".$quality_pos_."%".$mode_."%' OR ";
			}	
		}
 
		$search = substr($search, 0, -4); // removing " OR " at the end of the string
		echo $search;
 
		$sql = "SELECT * FROM results WHERE vehicle_id in ($veh_id_list) AND $search ORDER BY $order_by $order_dir";
steph_arrow est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h20.


 
 
 
 
Partenaires

Hébergement Web