[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить mysql запрос
okapo
Помогите с запросом,

хочу вывести на главной страницы форума: Последнее сообщение (из всех форумах)
где будет:
1:называние темы
2: дата сообщения
3: логин(кто оставил сообщение)

вот ячейка с называние темы: forum_name из таблицы ".DB_PREFIX."_forum_topics
ячейки для с комментария:
date
login
из таблицы ".DB_PREFIX."_comments
помогите очень надо, раньше писал в таблицы форума все эти данные, но не всегда работают как надо, хочу что бы все на автоматом работало

вот писал такой запрос но он не работает

$content = $mysqli->query("SELECT
k.sid,k.cat_name,k.access_read AS cat_read,
f.name,f.desc,f.status,f.access_read AS forum_read,f.readed,
count(t.forumID) AS topics,
MAX(`date`) AS ldate

FROM "
. DB_PREFIX . "_forum_category k
LEFT OUTER JOIN "
. DB_PREFIX ."_forum_forums f ON (f.catID = k.sid)
LEFT JOIN "
.DB_PREFIX."_forum_topics t ON (t.forumID = f.fid)

LEFT JOIN
(
SELECT MAX(`date`) AS ldate
FROM "
.DB_PREFIX."_comments
WHERE `module`='forum'
GROUP BY `id`
) c
ON (c.`itemID` = t.`tid`)

GROUP BY k.sid, f.fid
ORDER BY k.posi, f.posi ASC"
);


вот если сниму эту часть то он работает

LEFT JOIN
(
SELECT MAX(`date`) AS ldate
FROM ".DB_PREFIX."_comments
WHERE `module`='forum'
GROUP BY `id`
) c
ON (c.`itemID` = t.`tid`)


не понимаю в чем проблема все правельно прописал, но выходит ошибка запроса


кто может помочь ?



Спустя 18 минут, 8 секунд (17.11.2011 - 22:12) Placido написал(а):
Начнем с того, что поле, по которому осуществляется группировка (`id`), должно присутствовать в части SELECT...
И текст сообщения об ошибке тоже не помешал бы.

Спустя 7 минут, 7 секунд (17.11.2011 - 22:19) okapo написал(а):
текст ошибки
Цитата
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given


прописал так:
SELECT 
k.sid,k.cat_name,k.access_read AS cat_read,
f.name,f.desc,f.status,f.access_read AS forum_read,f.readed,
count(t.forumID) AS topics,
MAX(c.`date`) AS ldate

FROM " . DB_PREFIX . "_forum_category k
LEFT OUTER JOIN ". DB_PREFIX ."_forum_forums f ON (f.catID = k.sid)
LEFT JOIN ".DB_PREFIX."_forum_topics t ON (t.forumID = f.fid)

LEFT JOIN
(
SELECT `id`, MAX(`date`) AS ldate
FROM ".DB_PREFIX."_comments
WHERE `module`='forum'
GROUP BY `id`
) c
ON (c.`itemID` = t.`tid`)

GROUP BY k.sid, f.fid
ORDER BY k.posi, f.posi ASC

Спустя 5 минут, 21 секунда (17.11.2011 - 22:24) Игорь_Vasinsky написал(а):
запрс видимо вернул false

меня пугают такие запросы... убежал.

Спустя 18 минут, 26 секунд (17.11.2011 - 22:42) Placido написал(а):
В "верхнем" SELECT вместо MAX(c.`date`) AS ldate нужно написать просто `c`.`ldate`.

Да, и я имел в виду текст об ошибке mysql ($mysqli->error)...

Спустя 13 часов, 3 минуты, 24 секунды (18.11.2011 - 11:46) okapo написал(а):
Цитата (Placido @ 17.11.2011 - 19:42)
В "верхнем" SELECT вместо MAX(c.`date`) AS ldate нужно написать просто `c`.`ldate`.

Да, и я имел в виду текст об ошибке mysql ($mysqli->error)...

Не помогло sad.gif

Спустя 20 минут, 49 секунд (18.11.2011 - 12:07) sergeiss написал(а):
Тебе другую ошибку надо посмотреть.

Перед запуском запроса выведи его (текст запроса!) на экран, скопируй этот текст и запусти через phpmyadmin. Вот что он выдаст, то и покажи. И может быть, ты даже сам поймешь, в чем дело. Естественно, что сначала надо запрос записать в переменную, которую можно будет вывести на экран, а можно будет передать в запросе в БД.

Плюс к этому, если уж Мускуль требует использовать "обратные кавычки", то надо считаться с ним. Поставь их везде, у всех имен таблиц и имен переменных.

Спустя 1 час, 7 минут, 18 секунд (18.11.2011 - 13:14) okapo написал(а):
Цитата
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '" . DB_PREFIX . "_forum_category k LEFT OUTER JOIN ". DB_PREFIX ."_for'


вот что мне выдал phpmyadmin, но сам не разбираюсь, еще не делал такой сложный запрос

Спустя 15 минут, 47 секунд (18.11.2011 - 13:30) sergeiss написал(а):
Так а сам-то запрос покажи, который в итоге получился!!! Потому что мало ли как ты составляешь его. Важно то, какой запрос получился.

PS. Да, кстати!!! Судя по тексту ошибки, у тебя в запросе так все двойные кавычки и точки прописываются. То есть, ты саму строку неправильно формируешь. Ты её, случайно, не в одинарные кавычки заключаешь?

Спустя 4 часа, 15 минут, 35 секунд (18.11.2011 - 17:45) okapo написал(а):
SELECT k.sid, k.cat_name, k.access_read AS cat_read, f.name, f.desc, f.status, f.access_read AS forum_read, f.readed, COUNT( t.forumID ) AS topics,  `c`.`ldate` 
FROM " . DB_PREFIX . "_forum_category k
LEFT OUTER JOIN ". DB_PREFIX ."_forum_forums f ON ( f.catID = k.sid )
LEFT JOIN ".DB_PREFIX."_forum_topics t ON ( t.forumID = f.fid )
LEFT JOIN (

SELECT `id` , MAX( `date` ) AS ldate
FROM ".DB_PREFIX."_comments
WHERE `module` = 'forum'
GROUP BY `id`
)c ON ( c.`itemID` = t.`tid` )
GROUP BY k.sid, f.fid
ORDER BY k.posi, f.posi ASC
LIMIT
0 , 30



вот что получилось

Спустя 41 минута, 2 секунды (18.11.2011 - 18:26) Placido написал(а):
(SELECT  `id` , MAX(  `date` ) AS ldate
FROM ".DB_PREFIX."_comments
WHERE `module` = 'forum'
GROUP BY `id`
)c ON ( c.`itemID` = t.`tid` )

Ты объединяешь по `c`.`itemID`, а в части SELECT его нету.

Спустя 48 минут, 23 секунды (18.11.2011 - 19:15) sergeiss написал(а):
Цитата (okapo @ 18.11.2011 - 18:45)
вот что получилось

это что? То, что ты передаешь уже в MySQL на обработку? То есть, это то, что ты выводишь в браузере прямо перед тем, как передать в Мускуль? Если да, то тогда я тебя поздравляю: у тебя не сделана подстановка констант smile.gif

Покажи еще раз полный ПХП-код этого фрагмента.

Цитата (Placido @ 18.11.2011 - 19:26)
Ты объединяешь по `c`.`itemID`, а в части SELECT его нету.

И это тоже верное замечание...

Спустя 27 минут, 26 секунд (18.11.2011 - 19:42) okapo написал(а):
Цитата (Placido @ 18.11.2011 - 15:26)
(SELECT  `id` , MAX(  `date` ) AS ldate
FROM ".DB_PREFIX."_comments
WHERE `module` = 'forum'
GROUP BY `id`
)c ON ( c.`itemID` = t.`tid` )

Ты объединяешь по `c`.`itemID`, а в части SELECT его нету.

Ура!!! запустилось, сейчас попробую вытаскивать все, отпишусь

Спустя 2 часа, 44 минуты, 1 секунда (18.11.2011 - 22:26) okapo написал(а):
SELECT k.sid, k.cat_name, k.access_read AS cat_read, f.fid, f.name, f.desc, f.status, f.access_read AS forum_read, f.readed, COUNT( t.forumID ) AS topics,  `c`.`ldate` , c.login
FROM " . DB_PREFIX . "_forum_category k
LEFT OUTER JOIN ". DB_PREFIX ."_forum_forums f ON ( f.catID = k.sid )
LEFT JOIN ".DB_PREFIX."_forum_topics t ON ( t.forumID = f.fid )
LEFT JOIN (

SELECT ic.`id` , ic.`itemID` , MAX( ic.`date` ) AS ldate, u.login
FROM ".DB_PREFIX."_comments ic
LEFT JOIN ".DB_PREFIX."_users u ON ( u.id = ic.loginID )
WHERE `module` = 'forum'
GROUP BY ic.`id`
ORDER BY ic.`id` DESC
)c ON ( c.`itemID` = t.`tid` )
GROUP BY k.sid, f.fid
ORDER BY k.posi, f.posi ASC


вот сделал так и все хорошо работает, вытаскиваю дату и логин последней комментарий

теперь как вывести называние темы в который был написан последний комментарий ?

ячейка называется topic_name в таблице ".DB_PREFIX."_forum_topics


как это осуществить

Спустя 19 минут, 9 секунд (18.11.2011 - 22:45) Placido написал(а):
Делов-то. В верхнем селекте допиши
, `t`.`topic_name`

И, кстати, LEFT OUTER JOIN и LEFT JOIN - одно и то же.

Спустя 23 минуты, 30 секунд (18.11.2011 - 23:09) okapo написал(а):
блин вот попал! не додумался до это, вот еще тут
если нету комментарий то уже надо вывести из тему логин и дата, там также называются,

возможно ли это сделать ?
Быстрый ответ:

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