いくつかのカスタムパラメータに一致する製品を取得しようとしています。 製品、パラメータ、パラメータ項目の3つのテーブルが必要です。列を複数の値と照合して2つのテーブルを結合する
製品テーブル:
CREATE TABLE `products` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT
`Title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`Content` longtext COLLATE utf8_unicode_ci NOT NULL,
`Price` float(10,2) unsigned NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
パラメータテーブル:
CREATE TABLE `parameters` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Label` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
パラメータ項目表:
CREATE TABLE `parametersitems` (
`ProductID` int(10) unsigned NOT NULL DEFAULT '0',
`ParameterID` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`ProductID`,`ParameterID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
だから私の質問は、私はすべてのパラメータに一致する製品のみを得ることができる方法であります。
私が考えることができる唯一の方法は、数回のパラメータ項目テーブルに参加することです。 は例えば、ここでは2つのパラメータをマッチした製品を取得するためのクエリです:
SELECT
products.*
FROM
products
INNER JOIN
parametersitems AS paritems1
ON
paritems1.ItemID = products.ID
AND paritems1.ParameterID = 7
INNER JOIN
parametersitems AS paritems2
ON
paritems2.ItemID = products.ID
AND paritems2.ParameterID = 11
私の唯一の懸念がより多くのパラメータが選択された場合は、SELECTクエリが遅く、遅くなるということです。 この問題を処理するより良い方法はありますか?
は
少しのテストの後、私はこの方法が最速の方法だと言うことができます。どうもありがとう :) –