09.11.2016, 21:04
Всем привет.
Появилась нужна вернуть первый свободный ID в таблице с учётом того, что самые первые ID (1, 2, 3, etc...) могут быть пропущены (соответственно, если первые 3 ID пропущены, то вернуло бы 1).
Реализовать это в виде одного запроса не вышло, поэтому набросал функцию с двумя:
И всё, вроде, работает, но хотелось бы узнать, хороша ли реализация и если нет, как это всё можно реализовать лучше?
Появилась нужна вернуть первый свободный ID в таблице с учётом того, что самые первые ID (1, 2, 3, etc...) могут быть пропущены (соответственно, если первые 3 ID пропущены, то вернуло бы 1).
Реализовать это в виде одного запроса не вышло, поэтому набросал функцию с двумя:
PHP Code:
stock GetFreeTableNumber(const tablename[20], const columnname[20])
{
new query_string[106+(sizeof(columnname)*4)+(sizeof(tablename)*2)+1],
free_id;
format(query_string, sizeof(query_string), "SELECT MIN(%s) AS free_id FROM %s", columnname, tablename);
new Cache:result = mysql_query(mysql_connect_ID, query_string);
cache_get_value_name_int(0, "free_id", free_id);
cache_delete(result);
if(free_id != 1)
return 1;
else
{
format(query_string, sizeof(query_string), "SELECT %s+1 AS free_id FROM %s AS a1 WHERE (SELECT 1 FROM %s AS a2 WHERE a2.%s=a1.%s+1) IS NULL ORDER BY a1.%s LIMIT 1", columnname, tablename, tablename, columnname, columnname, columnname);
result = mysql_query(mysql_connect_ID, query_string);
cache_get_value_name_int(0, "free_id", free_id);
cache_delete(result);
return free_id;
}
}