こんにちは私はいくつかのクエリを1つにまとめようとしていますが、これを解決する方法がわかりません。他にも何百万もの例があることは知っていますが、それらをクエリに変換する方法がわかりません。
これがデータベースです。最初はテーブル名です:次に、主キーと外部キー
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 FROMギャラリー(行ごとに1つのgalleryIDで、同じ8つではありません)、concertIDとURL FROMコンサート(同じconcertIDを持つ1つのランダムな投稿)、FROM写真(同じconcertIDを持つ1つのランダムな投稿)です。これらの結果を私に与えます:
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;
私もこのエラーでJOINを使ってこれをやろうとしました#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;