我正在使用mysql來存儲我的化學分析。並用html/php過濾結果並生成查詢以獲取我想要的結果。現在事情變得越來越複雜了,我試圖自己加入表格來應用所有的過濾器。自我加入多個條件
我的餐桌設計就像超過50k行。
+--------+---------+-------------+----------------+
| Column | Type | Index | |
+--------+---------+-------------+----------------+
| RID | int | primary_key | auto increment |
| ID | int | index | |
| Type | int | | |
| Order | int | | |
| Num | int | | |
| Val1 | decimal | | |
| Val2 | decimal | | |
+--------+---------+-------------+----------------+
每個樣品具有ID,不同類型的和順序。 Val1和Val2是Num型分析的結果。現在有42個不同的Num。
例如,如果我的過濾器都是這樣的,
Select Types (1,3,9)
Select ANum (0,5)
Type 1, Num 5 should be bigger than 10 In Val2
Type 1, Num 5, should be smaller than 30 In Val2
Type 3, Num 0, should be smaller than 8 In Val1
我使用的是查詢產生的結果。
SELECT analyse.* FROM analyse
INNER JOIN
(SELECT ID FROM analyse WHERE Type = 1 AND Num = 5 AND Val2 < 30) AS a1 ON a1.SID = analyse.SID
INNER JOIN
(SELECT SID FROM WHERE Type = 1 AND Num = 5 AND Val2 > 10) AS a2 ON a2.SID = analyse.SID
INNER JOIN
(SELECT SID FROM analyse WHERE Type = 3 AND Num = 0 AND Val1 > 8) AS a3 ON a2.SID = analyse.SID
WHERE Type IN (1,3,9) AND Num IN (0,5) ORDER BY ID, Type, Order, Num ASC
+-----+------+-------+---------------+--------------+--------------+--------------+
| ID | Type | Order | Val1[Num[0]] | Val2[Num[0]] | Val1[Num[5]] | Val2[Num[5]] |
+-----+------+-------+---------------+--------------+--------------+--------------+
| ... | ... | ... | ... | ... | ... | ... |
| 118 | 1 | 1 | 10.9000 | 2.2083 | 3.5056 | 15.2627 |
| 118 | 1 | 2 | 9.5000 | 1.9246 | 2.0305 | 11.7049 |
| 118 | 1 | 3 | 7.9000 | 1.6005 | 2.4274 | 16.6597 |
| 118 | 2 | 1 | 10.9000 | 2.2083 | 3.5056 | 15.2627 |
| 118 | 3 | 2 | 20.4000 | 4.1329 | 2.8187 | 22.9676 |
| 118 | 4 | 3 | 28.3000 | 5.7334 | 2.7094 | 29.6273 |
| 119 | 1 | 1 | 27.2000 | 6.8635 | 0.5506 | 14.9084 |
| 119 | 1 | 2 | 25.9000 | 6.5355 | 0.4249 | 10.9550 |
| 119 | 3 | 1 | 27.2000 | 6.8635 | 0.5506 | 14.9084 |
| 119 | 3 | 2 | 53.1000 | 13.3989 | 0.4893 | 25.8634 |
| ... | ... | ... | ... | ... | ... | ... |
+-----+------+-------+---------------+--------------+--------------+--------------+
所需的輸出應該是這樣的。但是,由於還有其他Val1和Val2值具有相同的ID,相同的類型但順序不同,因此INNER JOIN無法按預期工作。總是會出現比我的過濾器更大和更小的值。其中一些從未顯示。
對不起如果它太長。我無法找到正確的陳述或結構。有什麼建議?
編輯:對不起。我忘記提及所有其他數據必須顯示的ID。這就是我試圖使用連接的原因。
你可以列出結構或者是數據吧...您在WHERE子句中引用的「S型」。此外,你正在尋找每個「ID」的基礎上的結果?,並且每個化學分析預計在一個特定的順序?如條件1必須在條件2之前找到,等條件3等?從滿足所有3個標準的那些是......那些是你想要的最終記錄? – DRapp
@DRapp我在這裏寫了查詢,所以SType被誤寫了。這是「類型」。正如我所說的需要一個通過過濾器的ID的所有數據。作爲一個例子如果我的條件爲「類型1,數字5小於20 val2」,29.62,22,96仍然會顯示爲Val2。因爲有參數通過ID爲118的過濾器。 – tuze