Взимане на последен пост

metal_head

Registered
И така, в момента пиша форуми към сайта си. Ето на какви бази данни са разделени:

forums - това е базата данни с имената на отделните подфоруми

forum_threads - това е базата данни с имената на темите. Тук всяка тема се записва с името си, към ID-то на кой форум спада, etc.

forum_posts - тук са постовете във форума, като там се записва към ID-то на коя тема спада поста.

Във forum_posts също се записва и ID-то на потребителя, който го е постнал и всякаква такава информация, която ми дойде на ум.

Сега, когато разглеждам списъка с теми в даден форум, мога да взема лесно от кой е последния пост в темата и кога е написан, проблема ми е, когато разглеждам форумите. Искам на всеки форум последния пост да се показва. Ето как се опитах да го направя:

PHP:
$last = dbarray("SELECT users.* FROM users 
LEFT JOIN forum_posts ON forum_posts.author_id = users.user_id
LEFT JOIN forum_threads ON forum_threads.id = forum_posts.thread_id
LEFT JOIN forums ON forums.forum_id = forum_threads.forum_id WHERE forums.forum_id='".$forum['forum_id']."' ORDER BY forum_posts.post_id DESC LIMIT 1");

dbarray е функция, която връща направо асоциативния масив от заявката (тази идея я взех от php fusion).

Принципно всички колони, които са описани в заявката съществуват с имената, с които са записани. Проблемът е, че просто не връща нищо:
$last['username']
 
$last = dbarray("SELECT users.* FROM forum_threads as topics LEFT JOIN `forum_posts` ON (topics.id=forum_posts.thread_id) LEFT JOIN `users` ON (forum_posts.author_id=users.user_id) WHERE topics.forum_id='".$forum['forum_id']."' ORDER BY topics.id DESC, forum_posts.id DESC LIMIT 0, 1");

:lol:
 
Ами с това решение ми казва:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given
 
Нали уш каза че функцията dbarray върши тази работа

$last = dbarray("SELECT users.* FROM forum_threads as topics LEFT JOIN `forum_posts` ON (topics.id=forum_posts.thread_id) LEFT JOIN `users` ON (forum_posts.author_id=users.user_id) WHERE topics.forum_id='".$forum['forum_id']."' ORDER BY topics.id DESC, forum_posts.id DESC LIMIT 0, 1");
 
PHP:
function dbarray($query){
$result = mysql_query($query);
$row = mysql_fetch_array($result);
return $row;
}

Ето я функцията. Аз сега видях, че ти си написал някакво "topics" аз нямам такава таблица и не мога да се ориентирам topics каква роля играе, forum_threads в моя случай ли ?
 
Направи си функцията на

function dbarray($query){

$result = mysql_query($query) or die (mysql_error());

$row = mysql_fetch_array($result);

return $row;

}

и ми кажи каква грешка връща.
 
Като за начало дава това.
Unknown column 'forum_posts.id' in 'order clause'

Ти си ми променил имената на колоните и не мога да проследя логиката в заявката, която си ми дал, че да си ги оправя, иначе не би трябвало да има проблеми.
 
Извинявай за забавянето, чак сега сядам на компютъра. Ето ти на всичко структурите:



forum_posts:

post_id | thread_id post | author_id | edit_user | edit_time timestamp | user_ip | thread_post | rate

forum_threads:

id | forum_id | title | author | views | posts | rating | isimportant islocked | haspoll last_post | last_author category | timestamp

forums:

forum_id | forum_category | forum_order | forum_name forum_desc | forum_access | last_post | last_user | thread_count | color | moderators
 
$last = dbarray("SELECT users.* FROM forum_threads as topics LEFT JOIN `forum_posts` ON (topics.id=forum_posts.thread_id) LEFT JOIN `users` ON (forum_posts.author_id=users.user_id) WHERE topics.forum_id='".$forum['forum_id']."' ORDER BY topics.id DESC, forum_posts.post_id DESC LIMIT 0, 1");
 

Back
Горе