Programmer avec SPIP 3.0
Documentation technique sur SPIP 3.0

> > > > sql_select

sql_select

La fonction sql_select() sélectionne des contenus dans la base de données et retourne une ressource SQL en cas de réussite, ou false en cas d’erreur.

Elle dispose de 9 paramètres, les 2 premiers sont indispensables, placés dans l’ordre de description d’une requête SQL standard. Ils prennent en entrée (de préférence) un tableau, mais acceptent des chaînes de caractères dont les éléments sont séparés par des virgules :

  1. $select,
  2. $from,
  3. $where,
  4. $groupby,
  5. $orderby,
  6. $limit,
  7. $having,
  8. $serveur,
  9. $option.

La fonction sql_select() est souvent couplée à sql_fetch() comme ceci :

  1. // selection
  2. if ($resultats = sql_select('colonne', 'table')) {
  3. // boucler sur les resultats
  4. while ($res = sql_fetch($resultats)) {
  5. // utiliser les resultats
  6. // $res['colonne']
  7. }
  8. }

Télécharger

Les paramètres $select et $from acceptent de déclarer des alias. On peut donc imaginer :

  1. if ($r = sql_select(
  2. 'a.colonne AS colA',
  3. 'b.colonne AS colB',
  4. 'SUM(b.nombre) AS somme'
  5. ),
  6. 'tableA AS a',
  7. 'tableB AS b'
  8. ))) {
  9. while ($ligne = sql_fetch($r)) {
  10. // on peut utiliser :
  11. // $ligne['colA'] $ligne['colB'] $ligne['somme']
  12. }
  13. }

Télécharger

Exemple

Sélectionner les rubriques racines (id_parent=0) de la table « spip_rubriques » triés par rang [1] puis par ordre alphanumérique, et en demander toutes les colonnes (sélection totale avec ’*’) :

  1. $result = sql_select('*', "spip_rubriques", "id_parent=0", '', '0+titre,titre');
  2. while ($row = sql_fetch($result)){
  3. $id_rubrique = $row['id_rubrique'];
  4. // ...
  5. }

Télécharger

Sélectionner les chats mais pas les chiens (dans le titre) pour les articles du secteur 3 :

  1. $champs = array('titre', 'id_article', 'id_rubrique');
  2. $where = array(
  3. 'id_secteur = 3',
  4. 'titre LIKE "%chat%" ',
  5. 'titre NOT LIKE "%chien%"'
  6. );
  7. $result = sql_select($champs, "spip_articles", $where);

Télécharger

Sélectionner les titres et extensions connues pour les documents, et stocker cela dans un tableau :

  1. $types = array();
  2. $res = sql_select(array("extension", "titre"), "spip_types_documents");
  3. while ($row = sql_fetch($res)) {
  4. $types[$row['extension']] = $row;
  5. }

Télécharger

Cette sélection pourrait aussi s’écrire :

  1. $res = sql_select("extension, titre", "spip_types_documents");

Sélectionner les documents liés à une rubrique, avec le titre de la rubrique en question, triés par date antichronologique :

  1. $result = sql_select(
  2. "docs.id_document AS id_doc",
  3. "docs.extension AS extension",
  4. "docs.fichier AS fichier",
  5. "docs.date AS date",
  6. "docs.titre AS titre",
  7. "docs.descriptif AS descriptif",
  8. "R.id_rubrique AS id_rub",
  9. "R.titre AS titre_rub"),
  10. "spip_documents AS docs",
  11. "spip_documents_liens AS lien",
  12. "spip_rubriques AS R"),
  13. "docs.id_document = lien.id_document",
  14. "R.id_rubrique = lien.id_objet",
  15. "lien.objet='rubrique'",
  16. "docs.mode = 'document'"),
  17. "",
  18. "docs.date DESC");
  19. while ($row=sql_fetch($result)) {
  20. $titre=$row['titre'];
  21. // ...
  22. // et avec le tableau précédent :
  23. $titre_extension = $types[$row['extension']]['titre'];
  24. }

Télécharger

Notes

[1Un jour, un jour il y aura une véritable colonne dédiée !