1

我有一个用 PHP 和 MySQLi 填充的简单表。该表仅包含一个我设置为主键以避免重复的字段。一切正常,除了 MySQLi 按字母顺序对输入进行排序,即使我没有以这种方式将它们放入数据库。我想稍后从表中拉出,并按照我将项目放入数据库中的确切顺序来回显所有内容。

有没有办法轻松完成这项工作?我必须使用不同的字段作为主键吗?

$mysqli = connect_db();
$mysqli->query('TRUNCATE TABLE things');
$things = [bat, cat, apple, zero];
for($i = 0; $i < count($things); $i++){
    $query = $mysqli->prepare('INSERT INTO things (name) VALUES (?)');
    $query->bind_param('s', $things[$i]);
    $query->execute();
    $query->close();
}
$mysqli->close();

// The table puts them in the following order: apple, bat, cat, zero
4

3 回答 3

4

您必须INT AUTO_INCREMENT在表结构中添加一个字段。然后,您可以ORDER BY在输出时使用您的 id 字段。完成此操作后,您可以像这样向表中添加行:

$things = [bat, cat, apple, zero];
$val = '';
$query = $mysqli->prepare('INSERT INTO things (name) VALUES (:name)');
$query->bind_param(':name', $val); // $val is bound by reference!

for($i = 0; $i < count($things); $i++){
    $val = $things[$i];
    $query->execute();        
}

$query->close();
$mysqli->close();

免责声明:我通常使用 PDO,因此不能保证此代码可以完美运行。这只是为了获得一次准备语句然后在循环中绑定和执行的想法。

于 2013-10-03T21:42:57.243 回答
1

这是应该的,因为该字段是主键,因此它是一个索引,当它的索引只有一个字段时,MySQL 证明它是排序的 (az) 或 (1-n)。您可以添加另一个字段(Id 作为 INT 和主键),然后将您的字段更改为 UNIQUE 索引。

于 2013-10-03T21:31:16.923 回答
0

尝试这个:

$things = array('bat','cat','apple','zero');
foreach($things as $thing) {
    // $thing = bat, cat, apple, zero 
}

编辑:刚刚看到您没有 id 字段,添加一个!id(int 11) auto_increment primary_key 等,那你应该笑了

于 2013-10-03T21:33:29.233 回答