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 :

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

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 :

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

Exemple

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

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

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français