Programmer avec SPIP 3.0
Documentation technique sur SPIP 3.0

> > > > sql_in_select

sql_in_select

La fonction sql_in_select() effectue un sql_in sur le résultat d’un sql_select.

Elle prend les mêmes arguments que sql_select avec un premier en plus :

  1. $in est le nom de la colonne sur laquelle s’appliquera le IN,
  2. $select,
  3. $from,
  4. $where,
  5. $groupby,
  6. $orderby,
  7. $limit,
  8. $having,
  9. $serveur,
  10. $option.

On peut l’exploiter ainsi :

  1. $where = sql_in_select("colonne", "colonne", "tables", "id_parent = $id_parent"));
  2. // $where : colonne IN (3, 5, 7)
  3. if ($res = sql_select('colonne', 'autre_table', $where)) {
  4. // ...
  5. }

Télécharger

Cette fonction actuellement calcule les valeurs à intégrer dans le IN et ne crée donc pas une sous-requête. Dans l’avenir, elle sera peut être modifiée : si le gestionnaire de base de données utilisé accepte les sous-requêtes, alors c’est cela qui serait retourné de préférence, de sorte qu’on obtiendrait d’équivalent de :

  1. $where = sql_in("colonne", sql_get_select( "colonne", "tables", "id_parent = $id_parent"));
  2. // $where : colonne IN (SELECT colonne FROM tables WHERE id_parent=3)

Télécharger

Exemple

Supprimer toutes les liaisons entre un article et les mot-clés d’un groupe de mot donné :

  1. sql_delete("spip_mots_articles", array(
  2. "id_article=" . $id_article,
  3. sql_in_select("id_mot", "id_mot", "spip_mots", "id_groupe = $id_groupe"));

Télécharger