2011-01-12 6 views
0

私はこの3つのテーブルをMySQLに入れました。1行でMySQLからの情報を整列する

アーティスト名の表 この場合、画像のアドレス(p) IDの製品とIDのテーブル。 (pmx)

私は一緒に参加しようとしていますので、各アーティストごとに1つの行が表示されます。 p 1人のアーティストのためにいくつかのイメージがあります。私はmf_priorという列を追加しました。ここでは画像の数があります(ユーザーは自分自身に番号を割り当て、フロントエンドで表示したい3つの画像を選択します)。私は、アーティストたち(メーカー)を手紙で探しています。 "M" は

アイデアは私が

  1. MANUFACTURER_IDを取得したいのですがということです| mf_name | img1_id | img1_address | img2_id | img2_address | img3_id | img3_address

私は

  1. manufacturer_id1を取得しています| mf_name1 | img1_id | img1_address | NULL | NULL | NULL | NULL
  2. manufacturer_id1 | mf_name1 | NULL | NULL | img2_id | img2_address | NULL | NULL
  3. manufacturer_id1 | mf_name1 | NULL | MULL | NULL | NULL | img3_id | img3_address

は、私は、このMySQLのSELECTがあります。結果として

SELECT 
m.manufacturer_id , 
m.mf_name , 
p1.product_id AS pimg1 , 
p1.product_full_image AS p1 , 
p2.product_id AS pimg2 , 
p2.product_full_image AS p2 , 
p3.product_id AS pimg3 , 
p3.product_full_image AS p3 
FROM 
jos_vm_product_mf_xref AS pmx 
JOIN 
jos_vm_manufacturer AS m ON m.manufacturer_id = pmx.manufacturer_id 
JOIN 
jos_vm_product AS p1 ON p1.product_id = pmx.product_id AND p1.mf_prior = 1 
JOIN 
jos_vm_product AS p2 ON p2.product_id = pmx.product_id AND p2.mf_prior = 2 
JOIN 
jos_vm_product AS p3 ON p3.product_id = pmx.product_id AND p3.mf_prior = 3 

WHERE 
m.mf_chars = 'm' 

を私は3行を取得し、場所で、私はNULLを取得する -

上に示したように多分誰もがこの1で私を助けることができます - より良いSELECTを書くか、結果をPHPで返す

+0

最後に 'GROUP BY m.manufacturer_id'を追加してみてください。 –

+0

ええ、私はそれを試しましたが、実際に正しいのは緑色でマークされた私の答えです:) – mrGott

答えて

0
SELECT 
    ts.manufacturer_id , 
    tb1.mf_name , 
    ts.S1ID AS V1ID, 
    tb21.product_full_image AS V1 , 
    ts.S2ID AS V2ID, 
    tb22.product_full_image AS V2 , 
    ts.S3ID AS V3ID, 
    tb23.product_full_image AS V3 
FROM 
    (
     SELECT 
      tbs.manufacturer_id AS manufacturer_id, 
      MAX(S1) AS sn1, 
      MAX(S1ID) AS S1ID , 
      MAX(S2) AS sn2, 
      MAX(S2ID) AS S2ID , 
      MAX(S3) AS sn3 , 
      MAX(S3ID) AS S3ID 
     FROM 
      (
       SELECT 
        vs.manufacturer_id , 
        CASE 
         WHEN t2.mf_prior = 1 THEN 1 ELSE 0 
        END AS S1 , 
        CASE 
         WHEN t2.mf_prior = 1 THEN t2.product_id ELSE 0 
        END AS S1ID , 
        CASE 
         WHEN t2.mf_prior = 2 THEN 2 ELSE 0 
        END AS S2 , 
        CASE 
         WHEN t2.mf_prior = 2 THEN t2.product_id ELSE 0 
        END AS S2ID , 
        CASE 
         WHEN t2.mf_prior = 3 THEN 3 ELSE 0 
        END AS S3 , 
        CASE 
         WHEN t2.mf_prior = 3 THEN t2.product_id ELSE 0 
        END AS S3ID 
       FROM 
        jos_vm_product AS t2 
       JOIN 
        jos_vm_product_mf_xref AS vs ON vs.product_id = t2.product_id 
      ) tbs 
     GROUP BY 
      tbs.manufacturer_id 
    ) ts 
JOIN 
    jos_vm_manufacturer AS tb1 ON ts.manufacturer_id = tb1.manufacturer_id 
LEFT JOIN 
    jos_vm_product AS tb21 ON ts.S1ID = tb21.product_id AND ts.sn1 = tb21.mf_prior 
LEFT JOIN 
    jos_vm_product AS tb22 ON ts.S2ID = tb22.product_id AND ts.sn2 = tb22.mf_prior 
LEFT JOIN 
    jos_vm_product AS tb23 ON ts.S3ID = tb23.product_id AND ts.sn3 = tb23.mf_prior 

これは私の質問に対する正しい解決方法です。私はそれを使用していますが、それはうまくいきます。以前の質問は100%は解決されていない場合もあります。しかし、これは非常に1つです!

0

だから私は作った。

新しいSQL SELECTは、次のようになります。p1.product_id = pmx.product_id ON P3と

jos_vm_productを登録しよう

SELECT 
    m.manufacturer_id , 
    m.mf_name , 
    p1.product_id AS pimg1 , 
    p1.product_full_image AS p1 , 
    p2.product_id AS pimg2 , 
    p2.product_full_image AS p2 , 
    p3.product_id AS pimg3 , 
    p3.product_full_image AS p3 
FROM 
    jos_vm_product_mf_xref AS pmx 
JOIN 
    jos_vm_manufacturer AS m ON m.manufacturer_id = pmx.manufacturer_id 
JOIN 
    jos_vm_product AS p1 ON p1.product_id = pmx.product_id AND p1.mf_prior = 1 
JOIN 
    jos_vm_product AS p2 ON p1.product_id = pmx.product_id AND p2.mf_prior = 2 
JOIN 
    jos_vm_product AS p3 ON p1.product_id = pmx.product_id AND p3.mf_prior = 3 
WHERE 
    m.mf_chars = 'm' 

事がライン上の変更元である:

AND p3.mf_prior = 3

関連する問題