2017-09-18 17 views
0

code1、code2、code3、code4などのカラムを持つデータベーステーブルがある場合。次に、このテーブルに対して次のクエリを実行します。PHP MySQLが結果のクエリ行を1列にマージする

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

これらの列のいずれかが一致するすべての行が返されます。私はこれらの結果を2つの列がある新しいデータベーステーブルに書き込む必要があります。最初の列は検索対象のコードになります。この場合は「23」、2番目の列はクエリで見つかった一致する結果が23になります。

私のコードテーブル内の行がこのように見える場合。

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

私の新しいテーブルが

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

は、PHPを使用するためにこれを達成するために使用することができたり、私の最善の策は次のようになり、MySQLのクエリがあり、次のようにフォーマットされます、私は」することができます私はどちらかを使って欲しいものを達成するための合理的な方法を見つけるようです。私がこれまでに思いついたことは、動作しないか、複雑すぎるために簡単に失敗する可能性があるようです。

+0

照会して使用することは困難ですスキーマが不十分正規化されているので:https://www.essentialsql.com/get-ready-to-learn-sql-database-normalization-explained -in-simple-english/ – Sammitch

+0

idのようなテーブルコードテーブルにプライマリケーキがありますか? –

+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 ; 
関連する問題