[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединение таблиц
Гость_Roman
Добрый день. у меня такой вопрос к вам.
Имеются 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

Получится, что запрос
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 таблицы, а просто выбрать из одной "имгид" таким запросом ->

$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 написал(а):
Понятно, спасибо за ответ
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.