저는 화학 분석을 저장하기 위해 mysql을 사용하고 있습니다. 그리고 html/php로 결과를 필터링하고 원하는 결과를 가져 오기 위해 쿼리를 생성합니다. 이제는 복잡한 일이 생기고 모든 필터를 적용하기 위해 자체 조인을 시도하고 있습니다.여러 조건과 자체 결합
내 테이블 디자인은 50 만 개가 넘는 행이있는 것과 같습니다.
+--------+---------+-------------+----------------+
| 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은 의 결과입니다. 타입의 분석 결과입니다. 지금까지 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 절에 "STYPE"를 참조합니다. 더구나, 당신은 "ID"기초 당 결과를 찾고 있습니까? 그리고 각 화학 분석은 특정한 순서로 예상됩니다 ??? 조건 1과 같은 조건 2는 조건 3의 조건 2 등에서 발견되어야합니다. 3 가지 기준이 모두 충족되면 ... 원하는 최종 기록입니까? – DRapp
@DRapp 여기에 쿼리를 작성하여 SType이 잘못 작성되었습니다. "유형"입니다. 내가 말했듯이 필터를 통과하는 ID의 모든 데이터가 필요합니다. 예를 들어 "유형 1, 숫자 5, 20보다 작은 val2", 29.62, 22,96의 조건이 여전히 Val2에 표시됩니다. ID가 118 인 필터가 매개 변수를 전달하기 때문에 – tuze