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 : -# $in est le nom de la colonne sur laquelle s’appliquera le IN, -# $select, -# $from, -# $where, -# $groupby, -# $orderby, -# $limit, -# $having, -# $serveur, -# $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 : 15/05/10

Traductions : English, français