嗨我想结合一个查询到一个,但我不确定如何解决这个问题。我知道还有其他数百万个示例,但我无法弄清楚如何将它们翻译成我的查询。如何将SELECT SQL subquerys与RAND结合起来?
这是数据库。首先是表名:,然后是主键和外键
gallery:
galleryID
name
addedDate
concert:
concertID
galleryID
name
URL
addedDate
photo:
photoID
concertID
name
这是我的查询,它随机时间在URL上返回NULL。我想这是因为concertID和URL应该同时被选中。但它不允许有SELECT concertID, URL FROM concert WHERE galleryID = g.galleryID ORDER BY RAND() LIMIT 1
那么我该如何解决这个问题?
我在第一个查询中选择的内容除了在URL上获得NULL之外都是正确的。所以我需要选择的是galleryID和addedDate从画廊(1 galleryID每行NOT 8相同),concertID和URL从音乐会(同一concertID 1随机文章),名称从照片(1随机文章sameon concertID)。给我的结果:
11 2012-07-31 15:44:35 90 Picture\Path11 SomePicture28.jpg
36 2012-07-31 14:31:36 208 Picture\Path36 SomePicture11.jpg
09 2012-07-30 15:28:02 33 Picture\Path09 SomePicture69.jpg
SELECT galleryID, addedDate,
(SELECT concertID
FROM concert
WHERE galleryID = g.galleryID
ORDER BY RAND() LIMIT 1) AS curID,
(SELECT URL
FROM concert
WHERE concertID = curID) AS URL,
(SELECT p.name
FROM photo p, concert c
WHERE p.concertID = curID AND c.galleryID = g.galleryID
ORDER BY RAND() LIMIT 1) AS photoName
FROM gallery g ORDER BY addedDate DESC LIMIT 8;
我自己也尝试用这种错误#1054 - Unknown column 'p.concertID' in 'where clause'
SELECT galleryID, addedDate, c.concertID, c.URL, p.name
FROM (SELECT concertID, URL,
(SELECT name
FROM photo
WHERE p.concertID = curID.concertID
ORDER BY RAND() LIMIT 1) AS photoName
FROM concert
WHERE c.galleryID = curID.galleryID
ORDER BY RAND() LIMIT 1) curID
LEFT JOIN concert c ON curID.galleryID = c.galleryID
LEFT JOIN photo p ON p.name = curID.photoName
ORDER BY addedDate DESC LIMIT 8;
你有一个空的URL的演唱会?当你得到一个空网址时,试着为该音乐会ID选择'从音乐会中选择*'来检查它是否为空。 – theon 2012-08-02 17:30:25
我假设你从语法中使用mysql。这是真的? – 2012-08-02 18:13:41
不,URL没有NULL。我认为这是因为运行similtanius的2个subquerys curID不匹配。是的,我正在使用MySQL。 – user1571965 2012-08-02 22:04:37