2011-11-09 5 views
0

テーブルから約20個のランダムな行をランダムに取得しようとしていますが、INNER JOINコマンドを使用して、共通のID。他のテーブル間で順序を維持しながらランダムな行を取得する

データベースには2つのテーブルがあり、最初の(リスト)はid(穴がある)で索引付けされ、2番目のフィールド(リスト・エレメント)は1番目のテーブルの各IDに対して7つのfield_name/field_valueのペアを持ちます。私はそれらの5つに興味があります。

私はそれを行う方法について私の頭を包むことはできません。それはデータベースで行うことができますか、それとも複数のクエリでプログラムで実行する必要がありますか?

SELECT listings.id, listings.title, listings.featured, listingselements.field_name, listingselements.field_value 
FROM listings 
INNER JOIN listingselements 
ON listings.id = listingselements.id 
WHERE RAND()<(SELECT ((20/COUNT(*))*10) FROM listings) 
AND (listingselements.field_name = "price" 
OR listingselements.field_name = "bathrooms" 
OR listingselements.field_name = "bedrooms" 
OR listingselements.field_name = "sq_meter" 
OR listingselements.field_name = "city") 
ORDER BY RAND(); 

RAND(BY WHERE/ORDERは)素晴らしい作品、しかしクエリーはINNERは、次の項目に移動する前に列を登録しようつかむしません。

+0

わずかなタイプミスをランダムに20パーセントを入れてみては? on節はlistingselements(no db)を表示します – Andrew

+0

ちょうど訂正しました。 –

答えて

0

はlistingsdbelementsと句から内側の選択に

select inner_listings.id, inner_listings.title, inner_listings.featured, 
    listingselements.field_name, listingsdbelements.field_value 
from 
    (SELECT listings.id, listings.title, listings.featured 
    FROM listings 
    WHERE RAND()<(SELECT ((20/COUNT(*))*10) FROM listings) 
    ORDER BY RAND()) inner_listings 
inner join listingselements ON inner_listings.id = listingselements.id 
where (listingselements.field_name = "price" 
    OR listingselements.field_name = "bathrooms" 
    OR listingselements.field_name = "bedrooms" 
    OR listingselements.field_name = "sq_meter" 
    OR listingselements.field_name = "city") 
+0

成功!あなたは私の正気を救った、ありがとう。 –

関連する問題