Есть 2 таблицы. Одна "темы" (themes) другая "сообщения"(guest). У каждой темы есть свой номер (themes.index), у каждого сообщения есть свой номер (guest.index). Так же у каждого сообщения есть номер темы к которому он принадлежит (guest.theme). Так вот мне нужно сделать запрос на выборку, чтобы выбрались все столбцы таблиц "темы" и "сообщения", где guest.index максимальный и где guest.theme=themes.index. Причем сортировка должна осуществляться именно по этому guest.index по убыванию. Делаю это так: Код (Text): $res=mysql_query( "SELECT themes.*, guest.* FROM themes, guest WHERE (guest.index = max(guest.index) and guest.theme = themes.index) ORDER BY guest.index desc"); while ($stroka = mysql_fetch_row($res)) { Совершаю операции со $stroka[...] } Вот что в итоге получаю: Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/altwalls/public_html/forum.php on line 65 Видимо пустой запрос выходит... Помогите сделать, чтобы работало. Я вобщем-то уже до причины ошибки то догадался. По ходу дела он сначала выбирает максимальный индекс, а потом только смотрит чтобы совпадал номер темы с заданной, а у максимального номер другой. А нужно чтобы наоборот он выбрал сначала все сообщения с данным номером темы, а только потом нашел среди них с максимальным индексом...
решил это исправить сделав запрос в запросе. вот так вот: Код (Text): $res2=mysql_query("SELECT themes.*, guest.* FROM themes, guest WHERE (guest.index = max(SELECT guest.index FROM guest, themes WHERE guest.theme=themes.index) and guest.theme=themes.index)"); тоже не работает. притом, что методом тестирования я получил следующее: запрос SELECT guest.index FROM guest, themes WHERE guest.theme=themes.index работает и получает числа 40 и 42 запрос SELECT themes.*, guest.* FROM themes, guestWHERE (guest.index = '42' and guest.theme=themes.index) тоже работает общий же запрос работать не хочет. Видимо все упирается в то, что он не может выбрать наибольшее число из двух или после выбора представляет их не в том формате в котором нужно.
Заставил таки работать. Код выглядит так. Код (Text): $res2=mysql_query("SELECT themes.*, guest.* FROM themes, guest WHERE (guest.index = SELECT max(guest.index) FROM guest, themes WHERE guest.theme=themes.index) and guest.theme=themes.index"); Но работает оно неправильно. Вместо того чтобы искать для каждой темы свое максимальное сообщение, он берет сообщения всех тем и ищет максимальное из них. Соответственно в итоге получается таблица с одной темой... Goryn, честно пытался извлечь из ссылки пользы, но не нашел применения =( Быть может я избрал плохой способ реализации того что я хочу? Я всего лишь хочу чтобы сообщения с максимальным индексом, но принадлежащие разным темам (поэтому максимальный индекс у каждого свой) сравнивались и в зависимости от того чей индекс больше тема писалась выше. Элементарная сортировка по последнему написанному сообщению((
[sql]select * from themes t, guest g where t.index=g.theme and g.index in (select max(index) from guest group by theme)[/sql] А там сортируй как тебе надо и постарайся не использовать служебных фраз типа index в наименовании полей таблиц.