2015-12-20 2 views
2

У меня есть две таблицы с именем joy_gallery и joy_category.Как сравнить 2 таблицы в mysql

  • 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.jpg и 1 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

Какую базу данных вы используете? Возможно, создайте псевдоним с «как galIn» –

+0

im с использованием базы данных 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 
); 
Смежные вопросы