我有一张表格照片(product_id,description),就像这样
product_id
1
1
1
2
2个
我想插入“first”product_id = 1的描述;另一个为“第二”product_id = 1等等。有什么建议吗?
答案 0 :(得分:2)
像@Shi所述,我会考虑使用唯一的主键。
否则,如果已填充条目,您可以使用类似于:
的内容 UPDATE Photos SET description="DESCRIPTION" WHERE product_id=1 AND description="" LIMIT 1;
这将为最早输入的行添加一个描述,其中包含匹配的ID和空白描述,假设它没有使用不同的列进行索引。
答案 1 :(得分:1)
你绝对应该使用混乱的主键,比如AUTO_INCREMENT值(http://dev.mysql.com/doc/refman/5.1/en/create-table.html)。
这样,每条记录都会获得一个自己的唯一标识符,然后您可以使用它来唯一标识任何给定的记录。
答案 2 :(得分:0)
您要做的是创建一个insert
查询。插入主数据后,使用mysql_insert_id
函数获取新插入行的ID。然后,使用此新ID,您可以使用update
方法将任何新数据更新为您首次创建的行。
例如:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
$variables = array (
"one" => "something"
);
/* First query: */
mysql_query ("INSERT INTO mytable (product) values ('" . $variables["one"] . "')");
$new_id = mysql_insert_id();
/* Data processes... */
$variable["two"] = "Something else";
/* Second query: */
mysql_query ("UPDATE mytable SET something = '" . $variable["two"] . "' WHERE id = '" . $new_id . "');
答案 3 :(得分:0)
没有强硬法则强制你在MySQL中使用主键。你可以创建没有主键的表,甚至没有键或索引。
您可以使用存储引擎InnoDB定义这个:
CREATE TABLE photo_catalogue (
product_id INT,
description VARCHAR(128),
INDEX(product_id, description)
) engine=InnoDB
如果要使用MyISAM表,请用CHAR(128)替换VARCHAR(128)。您可以选择将索引定义为UNIQUE
。
我已经在生产系统中看到过具有数百万条目而没有索引的MySQL表格。在porpuse上避免索引带来额外的内存和性能问题。