0

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

我有一个名为的表carts和一个名为 的表products。该carts表有一个名为的列contents,其中包含一个序列化的项目编号数组。这些项目编号对应于 的pidproducts

我要做的是有一个查询来提取数据数组并将数组的内容与其对应的行匹配,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;

示例序列化数组:a:6:{i:0;s:3:"115";i:2;s:2:"82";i:4;s:2:"79";i:5;s:2:"58";i:6;s:2:"38";i:7;s:2:"85";}

4

1 回答 1

1

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

于 2013-02-12T19:38:37.603 回答