PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 08-04-2018 12:02:03

codeur21
Membre
Inscription : 06-01-2014
Messages : 64

apprendre à lire et comprendre une requete sql

bonjour

J'ai ressorti un vieux script d'annuaire de sites pour apprendre a lire et comprendre les requêtes sql

et dans cette ligne je ne comprends pas pourquoi le point virgule après une
parenthèse ouvrante :

FROM $from WHERE $where  AND  (";

Voici la suite dela requête :

  $sql_site = "SELECT *, DATE_FORMAT(date_validation, '%d %m %Y %H:%i') as date_fr FROM $T_sites WHERE id_cat = '$cat_id' AND activation = 1 ORDER BY date_validation DESC LIMIT $debut,$nb_sites_on_page";
  $cond_sites = "";
  //requete pour les sites
  for ($i=0;$i<$nb_mots;$i++)
  {
    if ( $PMA_infos['search_mots_complets'] ) {
      $LIKE = "RLIKE";
      $mot_accentue = '[[:<:]]'.trans_accents($mots_reels_recherches[$i]).'[[:>:]]';
    } else {
      $LIKE = "LIKE";
      $mot_accentue = "%$mots_reels_recherches[$i]%";
    };
    $cond_sites .= " (titre $LIKE '$mot_accentue' OR description $LIKE '$mot_accentue' OR url LIKE '%$mots_reels_recherches[$i]%') ";
    if ($i != ($nb_mots - 1)) //si on n'est pas sur le dernier mot
      $cond_sites .= $booleen;
  }
  $sql_sites .= $cond_sites;
  $sql_sites .= ") ORDER BY date_validation DESC LIMIT $debut,$nb_results2show ";
  // echo 'sel : '.$sql_sites;
  if ($page == 1)
  //construction des requetes pour le nombre de resultats et la recherche dans les categories
  {
    //requete pour effectuer la recherche dans les categories
    $sql_cats = "SELECT * FROM $T_categories WHERE activation = 1 AND (";
    //requete pour trouver le nombre total de sites dans le resultat
    $sql_nb_sites = "SELECT count(s.id) AS count FROM $from WHERE $where AND (";
   
    //requete pour les categories
    for ($i=0;$i<$nb_mots;$i++)
    {
      if ( $PMA_infos['search_mots_complets'] ) {
        $LIKE = "RLIKE";
        $mot_accentue = '[[:<:]]'.trans_accents($mots_reels_recherches[$i]).'[[:>:]]';
      } else {
        $LIKE = "LIKE";
        $mot_accentue = "%$mots_reels_recherches[$i]%";
      };
      $sql_cats .= " (cat_name $LIKE '$mot_accentue' OR texte $LIKE '$mot_accentue') ";
      if ($i != ($nb_mots - 1)) //si on n'est pas sur le dernier mot
        $sql_cats .= $booleen;
    }
    $sql_nb_sites .= $cond_sites;
    $sql_nb_sites .= ") ";
    $sql_cats .= ") ORDER BY cat_name ASC ";
   
 
  }

Merci d'avance de m'aider à comprendre

Dernière modification par codeur21 (08-04-2018 12:02:53)


Tu donnes du poisson a un homme tu le nourris pour un jour ,
tu l'apprends à pêcher tu le nourris toute sa vie

Hors ligne

#2 08-04-2018 16:41:30

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

Re : apprendre à lire et comprendre une requete sql

$sql_nb_sites = "SELECT count(s.id) AS count FROM $from WHERE $where AND (";
$sql_nb_sites .= $cond_sites;
$sql_nb_sites .= ") ";

la requête sql est dans la variable $sql_nb_sites dont le contenu est construit à fur et à mesure (sans raison dans ce cas mais pourquoi pas).
il faut donc regarder le contenu final de $sql_nb_sites pour étudier la requête finale produite.

Hors ligne

#3 08-04-2018 20:18:20

codeur21
Membre
Inscription : 06-01-2014
Messages : 64

Re : apprendre à lire et comprendre une requete sql

Salut tof73
,
en fait c'est le point virgule que je ne comprends pas bien parce que dans mon esprit
un point virgule donne pour moi la fin d'une instruction ceci dans beaucoup de languages
c , php , pascal... etc  je trouve celà bizarre 

Merci a toi et a bientôt


Tu donnes du poisson a un homme tu le nourris pour un jour ,
tu l'apprends à pêcher tu le nourris toute sa vie

Hors ligne

#4 08-04-2018 21:45:09

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

Re : apprendre à lire et comprendre une requete sql

avant, le ; il y a un " qui ferme la chaine de caractères.
mais la requête n'est pas exécutée de suite, elle ne l'est qu'après les deux autres lignes qui se finissent aussi par un ; comme souvent en php.

si j'écris
$sql_nb_sites = "une chaine;
au lieu de
$sql_nb_sites = "une chaine";
php va me dire qu'il y a une erreur dans mon code.

Hors ligne

#5 09-04-2018 09:56:19

codeur21
Membre
Inscription : 06-01-2014
Messages : 64

Re : apprendre à lire et comprendre une requete sql

ok merci tof73

je commence a comprendre mais c'etait la premiere fois que je rencontrais un point virgule tout de suite
après une parenthèse ouvrante

sinon tu disais sans raison dans ce cas : ça voudrais dire que ça pourrais être amélioré ?

Dernière modification par codeur21 (09-04-2018 09:57:04)


Tu donnes du poisson a un homme tu le nourris pour un jour ,
tu l'apprends à pêcher tu le nourris toute sa vie

Hors ligne

#6 09-04-2018 11:53:47

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

Re : apprendre à lire et comprendre une requete sql

$sql_nb_sites = "SELECT count(s.id) AS count FROM $from WHERE $where AND (";
$sql_nb_sites .= $cond_sites;
$sql_nb_sites .= ") ";

comme au moment de la première de ses lignes, $cond_sites a déjà sa valeur, on aurait pu écrire :
$sql_nb_sites = "SELECT count(s.id) AS count FROM $from WHERE $where AND ($cond_sites)";

Hors ligne

Pied de page des forums