Page 1 sur 1

opération en SQL

Posté : 07 févr. 2006, 16:18
par VaN
Bonjour,

j'aimerais savoir si il est possible en SQL de fusionner ces deux requetes pour n'en faire qu'une seule :
$sql_max = 	"SELECT MAX(forum_place) AS forum_place
				FROM frm_forums";
	$query_max = mysql_query(sql_max);
	$result_max = mysql_fetch_array(query_max);
	
	$sql = 	"INSERT INTO frm_forums
			VALUES('','".$_POST['forum_cat_id']."', '".$_POST['forum_title']."', '".$_POST['forum_description']."', 
			'".($result_max['forum_place']+1)."')";
	$query = mysql_query($sql) OR die("Erreur : ".mysql_error());
Est-il possible de faire l'addition dans la requete 2 , en allant directement chercher le MAX(forum_place) dans la requete 2, plutot que dans la requete1 ?

Posté : 07 févr. 2006, 18:16
par albat
  • Je ne pense pas.
    En tout cas, je ne vois pas de solution pour ça.
  • Je ne suis pas certain que cela t'apporterait grand-chose

Posté : 07 févr. 2006, 18:27
par Hubert Roksor
Pour peu que ta version supporte les tables dérivées (MySQL 5.0.x je pense) tu dois pouvoir faire ça:
$sql = "INSERT INTO frm_forums
		SELECT '', '" . $_POST['forum_cat_id'] . "', '" . $_POST['forum_title'] . "', '" . $_POST['forum_description'] . "', tmp.max_place + 1
		FROM (
			SELECT MAX(forum_place) AS max_place
			FROM frm_forums
		) AS tmp";

if (!mysql_query($sql))
{
	die('Erreur : ' . mysql_error());
)
Mais comme le dit albat, l'intérêt est assez faible. Attention tout de même à valider ce qui se trouve dans les $_POST, par ex:
$_POST['forum_title'] = mysql_real_escape_string($_POST['forum_title'])
...sinon il pourrait t'arriver de mauvaises surprises. De plus, les nombres ne devraient pas se trouver entre guillemets.