Question

I have 2 tables: photocategories:

id_categorie   name   date

photo:

id_photo  categorie_id  smallimage  bigimage

In my view I need to have the name of the categorie and ONLY one photo random how to do this select?thx

SELECT p.id,p.categorie_id,p.largeimage,p.smallimage,c.id_categorie,c.name FROM photos p, 
photocategories c WHERE c.id_categorie=p.categorie_id ORDER BY c.Date DESC

If I have for example 5 categories I need to show for every categorie only one photo

Was it helpful?

Solution

you can do like this

CREATE TABLE photocategories (
    id_category     int NOT NULL, 
    name     VARCHAR(255) , 
    date       VARCHAR(255) 
) ENGINE = MyISAM DEFAULT CHARACTER SET latin1;

CREATE TABLE photo (
    id_photo int NOT NULL,
    id_category     int NOT NULL, 
    smallimage     VARCHAR(255) , 
    bigimage       VARCHAR(255) 
) ENGINE = MyISAM DEFAULT CHARACTER SET latin1;


INSERT INTO photocategories VALUES (1, "cat1", "2014");
INSERT INTO photocategories VALUES (2, "cat2", "2014");
INSERT INTO photocategories VALUES (3, "cat3", "2014");
INSERT INTO photocategories VALUES (4, "cat4", "2014");
INSERT INTO photocategories VALUES (5, "cat5", "2014");

INSERT INTO photo VALUES (1, 1, "photo1", "2014");
INSERT INTO photo VALUES (2,1, "photo2", "2014");
INSERT INTO photo VALUES (3,2, "photo3", "2014");
INSERT INTO photo VALUES (4,2, "photo4", "2014");
INSERT INTO photo VALUES (5,3, "photo5", "2014");
INSERT INTO photo VALUES (6,3, "photo6", "2014");
INSERT INTO photo VALUES (7,4, "photo7", "2014");
INSERT INTO photo VALUES (8,4, "photo8", "2014");
INSERT INTO photo VALUES (9,5, "photo9", "2014");
INSERT INTO photo VALUES (10,5, "photo10", "2014");

SELECT *
FROM photocategories
LEFT JOIN (SELECT * FROM photo ORDER BY RAND()) 
tmp ON (photocategories.id_category = tmp.id_category)
GROUP BY tmp.id_category
ORDER BY photocategories.date;

enter image description here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top