MySQL - 从序列化数组执行JOIN?

时间:2013-02-12 19:33:56

标签: php mysql arrays serialization join

我正在使用PHP和MySQL创建一个简单的购物车脚本,我无法找出执行此查询的最快速,最有效的方法。

我有一个名为carts的表和一个名为products的表。 carts表有一个名为contents的列,其中包含一个序列化的项目编号数组。这些项目编号与pid的{​​{1}}列相对应。

我要做的是查询以获取数据数组并将数组的内容与products中的相应行匹配,这样我就可以回显出该产品的所有匹配数据。

products

示例序列化数组:CREATE TABLE `carts` ( `cart_id` INT(10) NOT NULL AUTO_INCREMENT, `session_id` VARCHAR(50) NULL DEFAULT NULL, `contents` LONGTEXT NULL, `first_name` VARCHAR(50) NULL DEFAULT NULL, `last_name` VARCHAR(50) NULL DEFAULT NULL, `address` VARCHAR(100) NULL DEFAULT NULL, `city` VARCHAR(100) NULL DEFAULT NULL, `state` VARCHAR(100) NULL DEFAULT NULL, `postal` VARCHAR(20) NULL DEFAULT NULL, `country` VARCHAR(20) NULL DEFAULT NULL, PRIMARY KEY (`cart_id`), UNIQUE INDEX `session_id` (`session_id`) ) COLLATE='utf8_general_ci' ENGINE=MyISAM AUTO_INCREMENT=7; CREATE TABLE `products` ( `pid` INT(4) NOT NULL AUTO_INCREMENT, `itemTitle` VARCHAR(100) NOT NULL, `itemNumber` VARCHAR(10) NOT NULL, `itemDescription` LONGTEXT NOT NULL, `imgArray` LONGTEXT NOT NULL, `visibility` TINYINT(1) NOT NULL, `availability` TINYINT(1) NOT NULL, `itemPrice` DECIMAL(8,2) NOT NULL, `accentColor` VARCHAR(11) NOT NULL, PRIMARY KEY (`pid`) ) COLLATE='latin1_swedish_ci' ENGINE=MyISAM AUTO_INCREMENT=143;

1 个答案:

答案 0 :(得分:1)

虽然技术上可行,但您不应尝试在序列化列上JOIN。最快的方法是使用推车和产品之间的桥接表。修改代码以处理桥表中的行而不是单个序列化字段应该不难。