2017-09-18 4 views
0

code1, code2, code3 및 code4와 같은 열이있는 데이터베이스 테이블이있는 경우. 그런 다음이 테이블에 대해 다음 쿼리를 실행합니다.PHP MySQL에서 결과 열을 단일 열로 병합

SELECT * 
FROM codetable 
WHERE code1 = 23 OR code2 = 23 OR code3 = 23 OR code4 = 23 

그런 다음 해당 열 중 하나가 일치하는 모든 행을 반환합니다. 이 결과를 가져 와서 두 개의 열이있는 새 데이터베이스 테이블에 써야합니다. 첫 번째 열은 검색되는 코드 또는이 경우 "23"이고, 두 번째 열은 내 쿼리에서 23이 아닌 일치하는 결과가됩니다.

내 코드 테이블의 행이 다음과 같이 표시됩니다. .

code1|code2|code3|code4 
23 |27 |30 |45 

나의 새로운 테이블이 다음과 같이 포맷됩니다,

queriedcode|result 
23   | 27 
23   | 30 
23   | 45 

이를 달성하는 데 사용할 수 있습니다 또는 내 가장 좋은 방법은 PHP를 사용하는 것입니다 MySQL의 쿼리 내가 할 수있는, 거기에 ' t을 사용하여 원하는 것을 성취 할 수있는 합리적인 방법을 찾은 것 같습니다. 지금까지 생각해 낸 모든 것은 작동하지 않거나 너무 복잡하여 쉽게 실패 할 수 있습니다.

+0

쿼리하고 사용하기 어려운 스키마가 제대로 정규화 때문에 : https://www.essentialsql.com/get-ready-to-learn-sql-database-normalization-explained -in-simple-english/ – Sammitch

+0

id와 같이 테이블 코드 테이블에 기본 kay가 있습니까? –

+0

예 "id"는 내 기본 키입니다. –

답변

1

PHP에서 이렇게하는 것이 더 효율적일 수 있습니다. 그러나, 당신이 할 수 있습니다

select code1 as queriedcode, code2 as result from t where code1 = 23 union all 
select code1, code3 from t where code1 = 23 union all 
select code1, code4 from t where code1 = 23 union all 
select code2, code1 from t where code2 = 23 union all 
select code2, code3 from t where code2 = 23 union all 
select code2, code4 from t where code2 = 23 union all 
select code3, code1 from t where code3 = 23 union all 
select code3, code2 from t where code3 = 23 union all 
select code3, code4 from t where code3 = 23 union all 
select code4, code1 from t where code4 = 23 union all 
select code4, code2 from t where code4 = 23 union all 
select code4, code3 from t where code4 = 23 ; 
관련 문제