Имеются 2 таблицы.
table1
id imgid count average
1 134 4 5
2 135 5 5
3 123 3 4
table2
id filename
12 peet.jpg
14 peet2.jpg
45 peet3.jpg
134 peet4.jpg
вообщем надо вытащить "filename". Поле id равно полю imgid . Но дело в том чтo imgid зависит от count и average их максимальных значений. я смог только таким запросом вывести максимальные значения в массив $res.
$q = mysql_query("SELECT `imgid` FROM `table1` WHERE
average=(SELECT MAX(average) FROM table1)
AND count=(SELECT MAX(count) FROM table1");
$res =mysql_fetch_assoc($q);
подскажиите теперь, как зная "imgid" вывести значения "filename";
Спустя 5 минут, 49 секунд (23.11.2010 - 11:31) linker написал(а):
imgid уникально или может повторяться?
Спустя 8 минут, 44 секунды (23.11.2010 - 11:40) Guest написал(а):
уникальный, так как значение imgid это значение id во 2ой таблице, а во 2ой таблице оно уникальное
Спустя 32 минуты, 7 секунд (23.11.2010 - 12:12) linker написал(а):
Я так понял, нужно вытащить одну запись у которой самый большой average и count?
SELECT `filename`, `average`, `count` FROM `table2`
LEFT JOIN `table1` ON `imgid` = `id`
ORDER BY `average` DESC, `count` DESC
LIMIT 1
Спустя 2 минуты, 50 секунд (23.11.2010 - 12:15) Guest написал(а):
нет, надо вытащить "filename".
Вот как я пытаюсь это сделать
Вот как я пытаюсь это сделать
$q = mysql_query("SELECT `filename` FROM `jos_phocagallery_img_votes_statistics`
JOIN `jos_phocagallery` ON
(jos_phocagallery_img_votes_statistics.imgid = jos_phocagallery.id)
WHERE `average`=(SELECT MAX(`average`) FROM `jos_phocagallery_img_votes_statistics`)
AND `count`=(SELECT MAX(`count`) FROM `jos_phocagallery_img_votes_statistics`");
Спустя 1 минута, 48 секунд (23.11.2010 - 12:16) linker написал(а):
А зачем вложенные запросы с MAX()? Тут еще нюанс, MAX(`average`) и MAX(`count`) могут соответствовать разных imgid и тогда () AND () ничего не даст. Сформулируй конкретно, что тебе нужно вытащить.
Спустя 2 минуты, 32 секунды (23.11.2010 - 12:19) Guest написал(а):
максимальное значение и надо знать, чтоб вытащить imgid ,а потом используя imgid из другой таблицы вытащить filename по id ( так как id будет равнен imgid)
Спустя 32 секунды (23.11.2010 - 12:19) Guest написал(а):
максимальное значение average и count ...
Спустя 4 минуты, 33 секунды (23.11.2010 - 12:24) linker написал(а):
Ок, смотри, допустим есть две записи в table1
1 134 4 5
2 135 5 4
Получится, что запрос
А теперь подумай, что тебе в реальности нужно получить. Я еще раз прошу настоятельно, сформулировать вопрос.
1 134 4 5
2 135 5 4
Получится, что запрос
SELECT MAX(`average`) FROM `table1`вернет значение 5, которое соответствует imgid равное 135, а запрос
SELECT MAX(`count`) FROM `table1`тоже вернет значение 5, но оно будет соответствовать imgid равное 134. В результате условие в запросе
... WHERE `average`= 5 AND `count`= 5ничего вообще не вернет.
А теперь подумай, что тебе в реальности нужно получить. Я еще раз прошу настоятельно, сформулировать вопрос.
Спустя 7 минут, 12 секунд (23.11.2010 - 12:31) Guest написал(а):
Я привел пример таблиц на абум :) на самом же деле, если не соединять 2 таблицы, а просто выбрать из одной "имгид" таким запросом ->
, то мне возвращает 3 ответа. я заношу их в массив $res[], теперь у меня в массиве есть 3 числа, и вот теперь зная етих 3 числа надо вывести из другой таблицы 3 filename'a соответствующие этим числам в массиве.
$q = mysql_query("SELECT `imgid` FROM `table1` WHERE
average=(SELECT MAX(average) FROM table1)
AND count=(SELECT MAX(count) FROM table1
");
$res = mysql_fetch_assoc($q);
, то мне возвращает 3 ответа. я заношу их в массив $res[], теперь у меня в массиве есть 3 числа, и вот теперь зная етих 3 числа надо вывести из другой таблицы 3 filename'a соответствующие этим числам в массиве.
Спустя 1 минута, 47 секунд (23.11.2010 - 12:33) linker написал(а):
while($row = mysql_fetch_assoc($res)) { $arr[] = $row['imgid']; }
mysql_query("SELECT `filename` FROM `table2`
WHERE `id` IN (" . implode(',', $arr) . ")");
Спустя 54 минуты (23.11.2010 - 13:27) Guest написал(а):
Сейчас попробую
Спустя 32 минуты, 59 секунд (23.11.2010 - 14:00) Guest написал(а):
Большое спасибо, помогло ! а вот так, для интереса, можно было бы это все выполнить в 1 запросе :-) ?
Спустя 1 час, 39 минут, 23 секунды (23.11.2010 - 15:39) linker написал(а):
Да, но данный случай относится к такому, что быстрее будет работать, если его разбить на несколько.
Спустя 22 часа, 6 минут, 6 секунд (24.11.2010 - 13:45) Гость_Roman написал(а):
Понятно, спасибо за ответ