我有一個食譜表,叫做食譜。 IDRecipe字段和配方的其他參數除類別外。分類是多維的,所以我有另一張桌子,用一種配方連接一對多。它被稱爲類別表(下面的表1)。正如你將在下面看到的,一個配方可以有多個維度的多個類別。所以我有一個描述類別和尺寸另一個表(表2),也低於:mysql組concat進入多個字段
-- Table 1
CREATE TABLE `recepti_kategorije` (
`IDRecipe` int(11) NOT NULL,
`IDdimenzija` int(11) NOT NULL,
`IDKategorija` int(11) NOT NULL,
KEY `Iskanje` (`IDdimenzija`,`IDKategorija`,`IDRecipe`) USING BTREE,
KEY `izvlecek_recept` (`IDdimenzija`,`IDRecipe`),
KEY `IDRecipe` (`IDRecept`,`IDdimenzija`,`IDKategorija`) USING BTREE,
KEY `kategorija` (`IDKategorija`,`IDdimenzija`,`IDRecipe`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_slovenian_ci;
INSERT INTO `recepti_kategorije` VALUES
(1,1,1),
(1,1,2),
(1,2,3),
(1,3,2);
-- Table 2
CREATE TABLE `recipes_dimensions` (
`IDDimenzija` int(11) NOT NULL,
`IDKategorija` int(11) NOT NULL,
`Ime` char(50) COLLATE utf8_slovenian_ci NOT NULL,
KEY `IDDmenzija` (`IDDimenzija`,`IDKategorija`) USING BTREE,
KEY `IDKategorija` (`IDKategorija`,`IDDimenzija`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_slovenian_ci;
INSERT INTO `recipes_dimensions` VALUES
(1,1,'cheese'),
(1,2,'eggs'),
(1,3,'meat'),
(1,4,'vegetables'),
(2,1,'main dish'),
(2,2,'sweet'),
(2,3,'soup'),
(3,1,'summer'),
(3,2,'winter');
-- Table 3
CREATE TABLE `recepti_dimenzije_glavne` (
`IDDimenzija` int(11) NOT NULL,
`DimenzijaIme` char(50) COLLATE utf8_slovenian_ci DEFAULT NULL,
PRIMARY KEY (`IDDimenzija`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_slovenian_ci;
INSERT INTO `recepti_dimenzije_glavne` VALUES
(1,'ingredient'),
(2,'type'),
(3,'season');
表2就是要找出每個尺寸和每個類別的傳說密鑰表。
所以從這個例子中我們可以看到,我的食譜ID1有一個標籤:奶酪和1號蛋,冬季是湯。
現在在我的食譜頁面上,我需要將所有這些內容打印出來,以便將每個維度的名稱與所有類別名稱一起打印出來。
好了,還有另外一個表,表3,獲得尺寸的名字了:
現在我需要的是一個查詢,將讓我在同一時間對配方ID = 1的所有尺寸組與名稱連接,如:
成分:奶酪,雞蛋|類型:湯|我試圖在SELECT語句中爲它們中的每一個做一個查詢,它的工作原理,但我需要8選擇查詢(總共有8個維度,例如我只寫了3),我的選擇查詢是:
SELECT
r.ID
(
SELECT
group_concat(ime SEPARATOR ', ')
FROM
recepti_kategorije rkat
JOIN recepti_dimenzije rd ON rd.IDKategorija = rkat.IDKategorija
AND rd.IDDimenzija = rkat.IDdimenzija
WHERE
rkat.IDRecipe = r.ID
AND rkat.IDDimenzija = 1
ORDER BY
ime ASC
) AS ingredient,
(
SELECT
group_concat(ime SEPARATOR ', ')
FROM
recepti_kategorije rkat
JOIN recepti_dimenzije rd ON rd.IDKategorija = rkat.IDKategorija
AND rd.IDDimenzija = rkat.IDdimenzija
WHERE
rkat.IDRecipe = r.ID
AND rkat.IDDimenzija = 2
ORDER BY
ime ASC
) AS type,
(
SELECT
group_concat(ime SEPARATOR ', ')
FROM
recepti_kategorije rkat
JOIN recepti_dimenzije rd ON rd.IDKategorija = rkat.IDKategorija
AND rd.IDDimenzija = rkat.IDdimenzija
WHERE
rkat.IDRecipe = r.ID
AND rkat.IDDimenzija = 3
ORDER BY
ime ASC
) AS season
FROM
recipes r
WHERE
r.ID = 1
這樣的作品,但由於解釋說,這是搜索每一次像6-8行,這是一個很長的查詢,我沒有得到的尺寸的名字,因爲我是在某種程度上慢需要另一個加入。
什麼是最佳方式將所有維分離到字段中並與類別名稱進行連接?我需要對此進行優化,因爲這是每秒發生一次的配方演示,我不能在這裏玩弄。我需要這些索引以便快速。
在哪裏「 - 」,我只能用「_」我相信 – Jerry2
必由之路是一個轉錄錯誤,從您將姓氏從斯洛文尼亞語更改爲英語時 - 修正 – Strawberry
順便說一下,此查詢會導致語法錯誤 - 所以當您說'此作品'時,這不是很正確 – Strawberry