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

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.

Помогите пожалуйста кто чем может)
 

Фанат

oncle terrible
Команда форума
Напиши два запроса, один из которых исполняется внутри обработки другого.
 

24web

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

24web

Новичок
Подскажите, что здесь не так, потому что условия, которые заданы в 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));
 

Andkorol

Новичок
ЖоПопóвщина детектед.
Названия таблиц и полей заключаем в обратные кавычки (`) – а не в одиночные, как в твоем коде в 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() – так себе приемчик, особенно на больших количествах записей в таблице.
 

24web

Новичок
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);
 
Сверху