抓取随机行,同时保持其他表的顺序
Posted
技术标签:
【中文标题】抓取随机行,同时保持其他表的顺序【英文标题】:Grabbing random rows while maintaining order across other tables 【发布时间】:2011-11-09 19:33:04 【问题描述】:我试图从一个表中随机抓取大约 20 个随机行,然后使用 INNER JOIN 命令,根据一个通用 ID 从不同的表中向这些行添加大约 7 列附加数据。
该数据库包含 2 个表,第一个(列表)由 id(有孔)索引,第二个(列表元素)对于第一个表中的每个 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() 效果很好,但是查询在转到下一项之前不会抓取 INNER JOIN 列。
【问题讨论】:
listingsdbelements 有轻微错字? on 子句显示列表元素(无 db) 是的,刚刚更正了,我更改了问题的变量名,因为它们太长了。 【参考方案1】:尝试将随机的 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")
【讨论】:
以上是关于抓取随机行,同时保持其他表的顺序的主要内容,如果未能解决你的问题,请参考以下文章