我几乎是一个MySql新手,很抱歉,如果这听起来很糟糕,或者我在主题上絮絮叨叨。
我正在建立一个表格,列出有关展览的所有数据。这包括具有诸如场地,日期,时间等数据的字段以及具有展示的项目列表的一个字段。该字段将具有分隔的数字列表。它们将介于1到50之间,范围为1到999,目前num_max为170。
我意识到将这些数据保存在单独的表中会更好,但这会使上传过程变得复杂,需要为每个新展览创建一个新表格,并且会产生更多的错误机会。
假设这个策略是正确的,我真正的问题是处理数据。
如何提取数字列表,然后使用它从主产品表中获取产品编号数组?
答案 0 :(得分:0)
您应该只需要一个表,其中包含要包含在展览中的项目。这个表可以有一个展览的几行,如下所示:
exhibit_id item_id description
______________________________________________
1 1 painting
1 2 statue
然后,您需要做的就是将两个表连接在一起。
否则,如果您不想这样做,请使用php explode
方法将分隔的字符串转换为数组。
$ data = mysql_query($ query);
while ($row = mysql_fetch_assoc($result)) {
$items = $row['items'];
//the explode method in php allows you to turn a delimited string into an array.
$items_array = explode(',', $items);
//loop through each of the items in this exhibit
foreach($items_array as $current_item) {
//do something with $current_item
}
}
答案 1 :(得分:0)
如果你要持有一个包含“2,45,67,126”等数据的字段,那么你将不得不使用你正在提取它的语言来处理它,也许是PHP。
“真正的”解决方案是在举办展览的桌子上有一个唯一的标识符,并有第二个表格与项目。例如,你的展览会有一个'42'的id,然后是第二个表(称为'items'),其中包含:
id item
42 2
42 45
42 67
42 126
这不应该使您的上传过程太复杂,然后您可以使用以下方式轻松返回展览中的所有项目:
SELECT item FROM items WHERE id=$exhibition_id
答案 2 :(得分:0)
实际上,每个展览不需要新表,只需在现有表中添加行。
子表中的行将通过外键与父表“相关”。
例如
exhibit
( id int auto_increment primary key comment 'PK unique identifier for exhibit'
, exhibit_venue
, exhibit_date
et al.
)
exhibit_item
( exhibit_id int comment 'fk to exhibit.id'
, item_id int comment 'fk to item.id'
, primary_key (exhibit_id, item_id)
, foreign_key exhibit_items_fk1 (exhibit_id) references exhibit (id)
, foreign_key exhibit_items_fk2 (item_id) references item (id)
)
item
( id int auto_increment primary key comment 'PK unique identifier for item'
, name
, description
, size
, weight
et al.
)
exhibit
id venue date
---- ------- -----------
123 Fox 2014-02-24
124 Ice 2014-03-01
item
id name description
---- -------- -----------
41 madonna painting
42 david sculpture
43 mona lisa painting
exhibit_item
exhibit_id item_id
---------- -------
123 41
123 42
123 43
如果您需要存储展览中项目的相对序列或位置(相对顺序),您可以向exhibit_item
表添加另一个属性,以存储表示该位置的整数。
获取一个展览的所有项目:
SELECT i.id
, i.name
, i.description
FROM exhibit_item s
JOIN item i
ON i.id = s.item_id
WHERE s.exhibit_id = 123
ORDER BY s.position
如果您更容易在展览中返回以逗号分隔的商品ID列表,则作为单个字符串...
SELECT GROUP_CONCAT(s.id ORDER BY s.position) AS item_list
FROM exhibit_item s
WHERE s.exhibit_id = 123