Bonjour à tous,

Je dois extraire des éléments d'une base de donnée. Il y a plus de 5000 lignes.

Donc au passege, connaitriez-vous une librairie qui fait de la pagination sur MSSQL et PHP?


Pour le moment je le fait à la mano et je bloque sur le WHERE.

Voici le détail,
Mon formulaire a des champs à choix multiple (checkbox)
galciers
-> 1
-> 2
-> 3
..
-> 500

locations
-> 1
-> 2

type
-> 1
-> 2
...
-> 12
Après l'envoi, je récupère les valeru ainsi
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
  (isset($_GET['glaciers'])) ? $array_glaciers = $_GET['glaciers'] : $array_glaciers = array(-1);
  (isset($_GET['locations'])) ? $array_locations = $_GET['locations'] : $array_locations = array(-1);
  (isset($_GET['types'])) ? $array_types = $_GET['types'] : $array_types = array(-1);
  (isset($_GET['replicas'])) ? $array_replicas = $_GET['replicas'] : $array_replicas = array(-1);
  (isset($_GET['boxes'])) ? $array_boxes = $_GET['boxes'] : $array_boxes = array(-1);
  (isset($_GET['isin'])) ? $array_isin = $_GET['isin'] : $array_isin = array(-1);
  (isset($_GET['isout'])) ? $array_isout = $_GET['isout'] : $array_isout = array(-1);
  (isset($_GET['isanalized'])) ? $array_isanalized = $_GET['isanalized'] : $array_isanalized = array(-1);
-1 est pour aucune donnée n'ont été sélectionné
isin, isout, isnanlyzed n'auront que les valeur 0 ou 1 , pour True ou False
Pour les autres, ils auront des valeurs de 1 à plus...

Je dois maintenant pensez à mon WHERE et j'ai d'abord penser a ceci
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
$where="(la.glaciers_id_glacier IN (1) AND la.locations_id_location IN (-1) AND la.types_id_type IN (1) AND la.replicas_id_replica IN (-1) AND la.boxes_id_box IN (-1) AND la.isin IN (-1) AND la.isout IN (-1) AND la.isanalized IN (-1))
"
Le probleme est que si je sélection rien pour location, j'aurai aucune lignes.

Si je sélection 1 ou pluseurs glaciers et une location, je dois avoir que les lignes pour ces sélections, donc mon where devrait correspondre à
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
$where="(la.glaciers_id_glacier IN (1,2,3) AND la.locations_id_location IN (1) )
"

J'ai aussi préparé ceci
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
$where="";
  $str_glaciers = implode(',',$array_glaciers);
  $where0g = "la.glaciers_id_glacier IN ($str_glaciers)";
 
  $str_locations = implode(',',$array_locations);
  $where0l = "la.locations_id_location IN ($str_locations)";
 
  $str_types = implode(',',$array_types);
  $where0t = "la.types_id_type IN ($str_types)";
 
  $str_replicas = implode(',',$array_replicas);
  $where0r = "la.replicas_id_replica IN ($str_replicas)";
 
  $str_boxes = implode(',',$array_boxes);
  $where0b = "la.boxes_id_box IN ($str_boxes)";
 
  $str_isin = implode(',',$array_isin);
  $where0i = "la.isin IN ($str_isin)";
 
  $str_isout = implode(',',$array_isout);
  $where0o = "la.isout IN ($str_isout)";
 
  $str_isanalized = implode(',',$array_isanalized);
  $where0a = "la.isanalized IN ($str_isanalized)";

Ma premiere rquête qui va compter le nombre de lignes en fonction des sélections ressemble à ceci
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
$tsql0= 'SELECT id_label FROM labels AS la WHERE '.$where.' ORDER BY la.id_label ASC;';
 
        $getResults0= sqlsrv_query($conn, $tsql0, array(), array("Scrollable"=>"static"));
        echo $num_rows = sqlsrv_num_rows( $getResults0 );

Donc maintenant la question est comment inclue à $where, le contenu de $where0g ou whee0l ou $where0r ou $where0i (etc), mais uniquement s'ils ont une sélection.

Le gros porbleme est qu'il faut aussi ajouter un AND entre deux, sauf pour le derniere. Etant donné que le dernier dépendra des sélections, on ne sait jamais lequel sera le dernier.

Si il y a aucune sélection, il faut me retourner toutes les lignes de la base de donnée, et évidement le tout avec des paginations.

Il y abien une maniere simple pour faire ceci?

Ensuite pour la pagination, je sais que je peux modifier ma requete avec
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
	$tsql= 'SELECT ROW_NUMBER() OVER(ORDER BY id_label ASC) AS rowws, id_label, id_glacier, g_name, g_country, l_name, id_replica, t_name, r_name, boxes_id_box, isOut, isIn, isAnalized, analized, comment, b_name FROM labels AS la
mais il faurait d'abord que ma requete avec mon WHERE soit correctement bien faire.

Si vous pouviez me guider pour faire le WHERE, ca serait super cool!!!!
Milles mercis et n'héaitez pas à poser des questions, si je n'ai été assez précis