Нужна помощь со скриптом (MySQL, Left JOIN)

VladimirZH

Новичок
Нужна помощь со скриптом (MySQL, Left JOIN)

Такая ситуация:

существует 3 таблицы

account (id, Login) - аккаунты
contacts (id1, id2, c1, c2) - контакты, где id1 - кто попросился, id2 - к кому попросились, c1, c2 - знаки принятия контактов один другим
photos (id, to_user) - фотографии

Нужно сделать запрос, который выбирал бы 10 последних фотографий, загруженных пользователями в контакт-листе. Ничего путевого сделать не получается, не сильно силен в left join и т.д.

Вот то, что попытался сделать, но что-то не работает:

$r = mysql_query("SELECT account.id, account.Login, photos.id AS ph FROM account, contacts, photos WHERE (((contacts.id1 = '$id') AND (account.id = contacts.id2)) OR ((contacts.id2 = '$id') AND (account.id = contacts.id1))) AND (contacts.c1 = 1) AND (contacts.c2 = 1) AND (photos.to_user = account.id) ORDER BY photos.id DESC limit 10") or die ("Query failed");
while ($l = mysql_fetch_assoc($r)) {
print_r($l);
}

(((contacts.id1 = '$id') AND (account.id = contacts.id2)) OR ((contacts.id2 = '$id') AND (account.id = contacts.id1))) - в этом скорее всего запутался, подразумевается, что как мы можем добавить кого-то в список контактов, так и нас могут.

Спасибо за помощь!
 
запросы строят с простейших, к одной таблице, и постепенно наращивая и проверяя результаты в среде, типа phpmysqladmin.
попытайся построить запрос к таблице contacts, выбрав id(id2) всех подтвержденных контактёров $id
 
Просто если делать вложенные запросы, их получится слишком много. Есть возможность достать это все одним запросом?
 
насчет слишком или не слишком много ты пока предположить не можешь
построй запросик-то
 
$r = mysql_query("SELECT account.id, account.Login FROM account, contacts WHERE (((contacts.id1 = '$id') AND (account.id = contacts.id2)) OR ((contacts.id2 = '$id') AND (account.id = contacts.id1))) AND (contacts.c1 = 1) AND (contacts.c2 = 1)") or die ("Query failed");
while ($l = mysql_fetch_assoc($r)) {
$r1 = mysql_query("SELECT photos.id FROM photos WHERE photos.to_user = '{$l["id"]}' limit 10") or die ("Query failed");
while ($l1 = mysql_fetch_assoc($r1)) {
print_r($l1);
}
}

Так вот получается. Если у пользователя много друзей, то это уже вложенный запрос, и количество запросов, хоть и простых, будет исчисляться сотнями. Это плохо. К тому же здесь скрипт выводит 10 фотографий от каждого конкретного пользователя, а нужно 10 последних ото всех.
 
VladimirZH
данный запрос возвращает правильный результат?
если да, то смело добавляй photos как в первоначальном посте. В чем тогда проблема-то?
 
Запрос виснет и блокирует таблицу. А второй запрос возвращает неправильный результат. Вместо желаемых 10 фотографий всех контактов, он возвращает 10 последних фотографий каждого контакта.
 
Сверху