我在Mysql中创建了一个使用此列的表
我的想法是,当我要在此表中添加新项目时,会自动生成“密码”,但必须有3个要求:
试图使用像uniqid()这样的功能;和mt_rand();但没有成功。
答案 0 :(得分:0)
你可以创建0-1000000之间的tmptable 当你插入到表中时,使用tmptable,之后必须使用此表中的行删除它。 或转发查询,但这是慢慢因为每次创建临时表。如果你创建一次temptable,那么它可能是快速的过程。
CREATE TEMPORARY TABLE IF NOT EXISTS listtable(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,tmp INT NOT NULL); SET @s = CONCAT(' INSERT INTO listtable(tmp)VALUES',REPEAT('(1),',1000000),'(1)&#39 ); PREPARE stmt1 FROM @s; 执行stmt1; SELECT id FROM listtable WHERE id NOT IN(从表中选择id)按rand()limit 1排序; DROP TABLE listtable;
答案 1 :(得分:0)
首先要考虑的逻辑:要实现此目的,您必须在杂货杂货控制器的方法中添加 callback_before_insert()函数。在此回调函数中,您将创建所需的随机数,然后将其添加到$ post_array变量,然后将$ post_array返回到控制器的方法(在杂货杂货店的官方页面上已经有示例)。 因此,在您控制器的某个位置添加以下内容:
function _create_unique_secret_number()
{
/*Create a random secret_Number between 0 and 1000000
* and assign it to a variable
*/
$random_unique_secret_number = mt_rand( 0, 1000000 );
/* Now make sure that your random secret number is not already "in use"
* which means that the generated id is already stored in your table.
*/
$query = $this->db->where( 'secretNumber', $random_unique_secret_number )
->get_where( 'your_table_name_goes_here' );
if( $query->num_rows() > 0 )
{
$query->free_result();
// Try again in case the randomly generated number above is in use
return $this->create_unique_secret_number();
}
$post_array['secretNumber'] = $random_unique_int;
return $post_array;
}
/* And finally call the function inside your controllers' method.
* I mean inside the method that is handling your table.
*/
$crud->callback_before_insert( array ($this, '_create_unique_secret_number') );
然后,您可以通过访问enter code here
$ post_array ['secretNumber']值来访问杂货堆控制器中生成的数字。