2015-12-20 71 views
2

我有兩個表名爲joy_galleryjoy_category如何比較mysql中的2個表

  • joy_gallery

    ╔════╦════════╦════════╗ 
    ║ id ║ cat_id ║ images ║ 
    ╠════╬════════╬════════╣ 
    ║ 1 ║ 1  ║ a.png ║ 
    ║ 2 ║ 1  ║ a1.png ║ 
    ║ 3 ║ 2  ║ b1.png ║ 
    ║ 4 ║ 1  ║ c.jpg ║ 
    ║ 5 ║ 2  ║ d.jng ║ 
    ║ 6 ║ 2  ║ a1.png ║ 
    ╚════╩════════╩════════╝ 
    
  • joy_category

    ╔═════╦══════════╦═════════════╗ 
    ║ Cid ║ category ║ Description ║ 
    ╠═════╬══════════╬═════════════╣ 
    ║ 1 ║ onam  ║ xcfghhyjkk ║ 
    ║ 2 ║ xmas  ║ hjytigkuyy ║ 
    ╚═════╩══════════╩═════════════╝ 
    

我會向這兩個表進行比較,顯示兩大類,最後我像這樣的每個類別的法師,1 onam c.jpg1 xmas a1.jpg。我正在使用這個mysql代碼:

SELECT * 
FROM joy_gallery INNER JOIN joy_category ON joy_gallery.cat_id = joy_category.Cid 
ORDER BY joy_category.Cid DESC; 

但它不工作。顯示來自同一類別的第一類和2個圖像。我該如何解決這個問題?如何顯示類別中的最後一張圖片?

回答

0

有可能是這樣做的更有效的方法,但一個解決辦法是:

SELECT cat_id, images 
FROM 
    (SELECT MAX(galI.gaid) gaid 
    FROM joy_gallery galI INNER JOIN joy_category cat 
    ON galI.cat_id = cat.Cid GROUP BY cat_id) galIn 
INNER JOIN joy_gallery gal USING(gaid); 
+0

蔭使用此代碼..但我得到了一個錯誤:未知列「galIn.gaid」在「字段列表」 .. – cnbwd

+0

您正在使用什麼數據庫?也許用「as galIn」創建別名 –

+0

即時通訊使用mysql數據庫 – cnbwd

1

試試這個:

SELECT j1.* FROM joy_gallery j1 
    JOIN (SELECT cid, MAX(cid) id FROM joy_category GROUP BY cid) j2 
    ON j1.cat_id = j2.cid ; 
0

您的查詢可能是這樣的:(tested

SELECT joy_category.Cid, joy_category.category, joy_gallery.images FROM joy_gallery 
JOIN joy_category 
ON joy_gallery.cat_id = joy_category.Cid AND 
joy_gallery.id IN (
    SELECT MAX(joy_gallery.id) 
    FROM joy_gallery 
    GROUP BY joy_gallery.cat_id 
) 

輸出:

Cid category images 
---------------------------- 
    1  onam  c.jpg 
    2  xmas  a1.png 
0

嘗試此查詢

SELECT a.Cid, a.category, c.images 
FROM joy_category a 
LEFT JOIN (
    SELECT max(gaid) as id, cat_id 
    FROM joy_gallery 
    GROUP BY cat_id 
) b ON b.cat_id = a.Cid 
LEFT JOIN joy_gallery c ON c.gaid = b.id 

注意:這不是測試,但我認爲它的工作。

0

嘗試此查詢

SELECT 
    r.Cid, 
    r.category, 
    b.images 
FROM 
    joy_category b 
JOIN joy_gallery r ON r.Cid = b.cat_id 
AND r.id = (
    SELECT 
     MAX (x.id) 
    FROM 
     joy_gallery x 
    WHERE 
     x.cat_id = b.Cid 
);