自动增加的唯一字符串ID

时间:2015-09-01 09:26:57

标签: php mysql

我已经在stackoverflow上阅读了很多答案,但是我找不到与我的问题有关的任何内容。

这是我的表:

`id` char(11) NOT NULL,
`element` varchar(32) NOT NULL,

我需要使用自动增量的11个字符的唯一字符串ID(如果可能,区分大小写)和数字,就像youtube一样:

youtube.com/watch?v=的 j5syKhDd64s

youtube.com/watch?v=的 YVkUvTmDf3Y

youtube.com/watch?v=的 8BcDeoKLsaY

...

我怎么能用mysql / php做到这一点?

3 个答案:

答案 0 :(得分:2)

你可能想要像hashids这样的东西。他们的页面也链接到替代解决方案。

如果这不合适,请更详细地描述您的问题。

答案 1 :(得分:0)

一种方法是使用此功能

    function generateRandomString($length = 11) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

然后将$ randomString结果传递给您的查询以添加到DB中。

编辑:  如果OP正在寻找他提到的字符串(aaaaaaaaaaa, aaaaaaaaaab, aaaaaaaaaac, aaaaaaaaaad),我建议您查看Theory of Computation

答案 2 :(得分:0)

这是我自动增加了我唯一的id字符串字段的代码。

case "Add":
    $itemno = $_POST['itemno'];
    $qty = $_POST['qty'];
    $unitprc = $_POST['unitprc'];
    $amt = $_POST['amt'];
    $coopmemid = $_SESSION['kiosk']['is_coopmemID_kiosk'];
    $totamt = 0;
    $totitm = count($itemno);
    $a_empgroid = array();
    for($x=0; $x<$totitm; $x++) {
        $Addquery = "INSERT INTO tb_empgrocery (coopmemID , date_ordered, item_no, qty_ordered, unit_price, amount) 
                     VALUES ('$coopmemid',(NOW()),'$itemno[$x]','$qty[$x]','$unitprc[$x]','$amt[$x]')";
        $atecCoop->query($Addquery);
        $totamt+=$amt[$x];
        $inserted_id = $atecCoop->insert_id;
        array_push($a_empgroid,$inserted_id);
    }
    $Savequery = "INSERT INTO tb_empgroc_master (order_status, date_ordered, total_items, total_amount) VALUES ('Pending', (NOW()), '$totitm', '$totamt')";
    $atecCoop->query($Savequery);
    $empgrocmstid = $atecCoop->insert_id;
    $orderno = date('y-m-').str_pad($empgrocmstid, 10, "0", STR_PAD_LEFT);
    $sql = "UPDATE tb_empgroc_master SET order_no='$orderno' WHERE empgrocmstID='$empgrocmstid'";
    $atecCoop->query($sql);
    foreach($a_empgroid as $empgrocid) {
        $sql = "UPDATE tb_empgrocery SET order_no='$orderno' WHERE empgrocID='$empgrocid'";
        $atecCoop->query($sql);
    }
break;

正如您所见,字段oder_no是唯一ID(varchar 25)

希望这会有所帮助:)