2011-11-09 19 views
0

我试图从表中随机抓取大约20个随机行,然后使用INNER JOIN命令将大约7列附加数据添加到基于一个共同的ID。抓取随机行,同时维持其他表的顺序

数据库包含2个表格,第一个(列表)由id(其中有孔)索引,第二个(listingselements)对于第一个表中的每个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(); 

的WHERE/ORDER BY RAND()的伟大工程,但查询不抢内上移动到下一个项目之前的连接列。

+0

轻微错字与listingsdbelements? on子句显示了listingselements(没有db) – Andrew

+0

刚刚纠正,我改变了这个问题的变量名称,因为它们太长了。 –

回答

0

尽量把随机20%为内选择在FROM子句中

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

成功!你已经救了我的理智,谢谢。 –