0

PHPとMySQLを使用して単純なカートスクリプトを作成していますが、このクエリを実行するための最速かつ最も効率的な方法を見つけるのに問題があります。

と呼ばれるテーブルとcartsと呼ばれるテーブルがありますproductscartsテーブルには、アイテム番号のシリアル化された配列を含むという列がありcontentsます。これらのアイテム番号は、のpid列に対応しています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;

シリアル化された配列のサンプル: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 に答える