2011-11-09 9 views
0

MySQLのクエリやテーブルに問題があり、解決に時間を費やしましたが、まだ答えがありません。だから私はあなたの助けが必要です。MySQLの特別なテーブル構造から情報を照会する方法はありますか?

表の形式は、それは大きなサイズのcsvファイル(約30万回線)からデータをロードするための表では、そのような構造を有していること

------------------------------------------------------------- 
col1 | col2 | col3 | col4 | col5 | col6 | 
------------------------------------------------------------- 
    a |  b | c  | null | null | null | 
------------------------------------------------------------- 
null | null | null | 1  | 2 | 3  | 
------------------------------------------------------------- 
    null | null | null | 4  | 5 | 6  | 
------------------------------------------------------------- 
    null | null | null | 7  | 8 | 9  | 
------------------------------------------------------------- 
    d | e  | f  | null | null | null | 
------------------------------------------------------------- 
    null | null | null | 10 | 11 | 12 | 
------------------------------------------------------------- 
    null | null | null | 13 | 14 | 15 | 
------------------------------------------------------------- 
    null | null | null | 16 | 17 | 18 | 
------------------------------------------------------------- 
... 

のようなものです。私が望むのは、可能な限り最速の時間にレコードを照会し、結果が書式であるmysqlステートメントを書くことです。

(a、b、c、1,2,3)、(a、b、c、1,2,3) 4,5,6)、(a、b、c、7,8,9)、(d、e、f、10,11,12)、(d、e、f、13,14,15) d、e、f、16,17,18)...

しかし...どのように?問題を解決するのを手伝ってください。 事前に受け入れる

+1

FORWARD(1,2,3の値)とBACKWARDの両方で検索する必要があるクエリを作成するのではなく、クライアント側でデータをマッサージする方がよいでしょう。 –

+0

コメントの数です。しかし、問題は、大きなサイズのCSVファイルからそのmysqlテーブル(最速のパフォーマンス)にデータをロードする必要があり、私のタスクがクライアントモジュールのこのテーブル構造から情報を取得していることです。レコードの数が何回も上回っています。 :( –

+0

これは問題ありませんが、.csvをテーブルにロードした後、lable、行単位でループする別のクエリを実行して欠落したデータを埋め込む必要があります。少し面倒ですが欠落しているデータを埋めるために「戻る」ように見えるクエリを作成する(a、b、cの値が欠落している行に転送される)ため、FORWARDを参照できるクエリを作成するのは非常に難しいので、 –

答えて

2

見た目は醜いですが、動作します。

SELECT * FROM (
SELECT 
    IF(col1 IS NULL,@c1,@c1:=col1) AS col1, 
    IF(col2 IS NULL,@c2,@c2:=col2) AS col2, 
    IF(col3 IS NULL,@c3,@c3:=col3) AS col3, 
    col4, col5, col6 
FROM 
    [table name], 
    (SELECT @c1:=0, @c2:=0, @c3:=0) x 
) y WHERE col4 IS NOT NULL; 
+0

+1良いこと;-) – Devart

+0

+1はい、とても良いですが、非常に多くのレコードを照会すると最適ですか? –

+0

上記のクエリで変数を使用しましたが、そのビューからビューを作成する場合は、 t解は? mySQLのビューはサブクエリと変数をサポートしていません –

関連する問題