我正在使用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;
答案 0 :(得分:1)
虽然技术上可行,但您不应尝试在序列化列上JOIN
。最快的方法是使用推车和产品之间的桥接表。修改代码以处理桥表中的行而不是单个序列化字段应该不难。