Mysql Извлечь данные из двух таблиц. Помогите составить запрос.

  • Автор темы Автор темы ipv
  • Дата начала Дата начала

ipv

Новичок
Добрый день!

Есть 2 таблицы - materials и images. Нужно выбрать всю информацию в порядке убывания по дате (это делаю самостоятельно) из materials, а потом посмотреть, есть ли для выбранной по дате информации хотя бы одна картинка. Если есть хотя бы одна - берем ее, если картинок несколько - выбрать лучшую по итогам голосования картинку (может быть сколько угодно картинок, прикрепленных к одному image_material_id) из images.

Materials состоит из 15 полей, в целях выборки информации главными полями являются material_id (автоинкремент), а также material_date. Таблица images состоит из 9 полей, для сортировки нужны image_material_id (содержит material_id из materials), а также image_votes - просто содержит число либо со знаком "+" либо "-" (напр., 10 или -12 и т.д.)

Допустим в этому месяце есть 10 записей в materials. Берем их все, поскольку подходят по дате. Далее смотрим на таблицу images. Там есть, например, по 3 картинки только к 9 записям из materials. Получается, что берем только 9 записей, поскольку нам записи из materials без картинки из images не нужны. Вот тут-то у меня проблема - не получается выбрать лучшую картинку из каждых трех (как в примере) картинок по полю image_votes.

Помогите пожалуйста кто чем может)
 
Напиши два запроса, один из которых исполняется внутри обработки другого.
 
Напиши два запроса, один из которых исполняется внутри обработки другого.
Подскажите, возможно встречался с этим - как это отражается на скорость выполнения кода, один запрос внутри в другом. Или лучше написать одним запросом сразу
 
Подскажите, что здесь не так, потому что условия, которые заданы в ON вообще не работают, и код извлекает из базы все данные:

PHP:
$partner_result = mysql_query("SELECT u.avatar,u.id,u.surname,u.name FROM users AS u LEFT JOIN partners AS p ON 'p.userid'='$id' AND 'u.id' = 'p.partnerid' ORDER BY RAND() LIMIT 4",$db);
        $partner_myrow = mysql_fetch_array($partner_result);
        do {
            $o_avatar = $partner_myrow['avatar'];
            $o_id = $partner_myrow['id'];
            $o_name = $partner_myrow['surname'].' '.$partner_myrow['name'];
            printf ("<a href='page.php?id=%s'><div><img alt='Аватар' src='%s'><span>%s<span></div></a>",$o_id,$o_avatar, $o_name);}
        while ($partner_myrow = mysql_fetch_array($partner_result));
 
ЖоПопóвщина детектед.
Названия таблиц и полей заключаем в обратные кавычки (`) – а не в одиночные, как в твоем коде в ON:
PHP:
"SELECT u.avatar,u.id,u.surname,u.name FROM users AS u LEFT JOIN partners AS p ON 'p.userid'='$id' AND 'u.id' = 'p.partnerid' ORDER BY RAND() LIMIT 4"
PHP:
"... p.`userid` = '" . intval($id) . "' AND u.`id` = p.`parentid` ..."
ORDER BY RAND() – так себе приемчик, особенно на больших количествах записей в таблице.
 
Andkorol, спасибо, помогло, но также INNER JOIN
PHP:
$partner_result = mysql_query("SELECT u.`avatar`,u.`id`,u.`surname`,u.`name` FROM users AS u partners AS p ON p.`userid`={$id} AND u.`id` = p.`partnerid` ORDER BY RAND() LIMIT 4",$db);
 
Сверху