Захват случайных строк при сохранении порядка в других таблицах

#sql

#sql

Вопрос:

Я пытаюсь случайным образом захватить около 20 случайных строк из таблицы, затем, используя команду INNER JOIN, добавить около 7 столбцов дополнительных данных к этим строкам из другой таблицы на основе общего идентификатора.

База данных содержит 2 таблицы, первая (listings) индексируется по идентификатору (в котором есть пробелы), вторая (listingselements) имеет 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 С ПОМОЩЬЮ RAND() отлично работает, однако запрос не захватывает столбцы ВНУТРЕННЕГО соединения перед переходом к следующему элементу.

Комментарии:

1. Небольшая опечатка с элементами listingsdbelements? в предложении on отображаются элементы listingselements (без базы данных)

2. Да, только что исправлено, я изменил имена переменных для вопроса, поскольку они слишком длинные.

Ответ №1:

попробуйте поместить случайные 20 процентов во внутренний select в предложении 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")