Запрос по двум или одной таблице

jenia

Новичок
Запрос по двум или одной таблице

Пытаюсь написать некое подобие форума на базе данных. В базе две таблицы: user, forum. В таблице user информация о зарегистрировавшихся юзерах (поля: name, login, pass, status, mess... ), а в таблице forum такие поля как: id, theme, text, nik, date, status. При отображении сообщений определённой темы, делаю такой запрос:

PHP:
SELECT *, forum.date as forum_date, user.date as user_date, forum.status as forum_status, user.status as user_status, forum.id as forum_id, user.id as user_id FROM forum, user WHERE forum.theme = '$theme' AND forum.nik = user.login ORDER BY forum_date;
То есть выбираю все поля таблицы forum в которых присутствует нужная тема и в которых есть пользователи из таблицы user. Этим же запросом выбираются данные о соответствующих пользователях из таблицы user. Проблема заключается в том, что не все пользователи зарегестрированы. Как переделать запрос так, чтобы одновременно выбирать из таблицы forum сообщения незарегистрированных пользователей?
 

Кром

Новичок
Тебе нужно не по нику делать связь между таблицами а по autoincrement id.
И вообще непонятно, где ты хранишь сами сообщения. Надеюсь не в user.mess. :)
 

jenia

Новичок
Нет, в user.mess я храню количество сообщений пользователя. А сами сообщения хранятся в forum.text.

-~{}~ 28.06.05 01:18:

Чё то я не понял, как мне делать связь по autoincrement id, если в таблице forum, id индивидуально для каждого сообщения, а в таблице user для каждого пользователя. Объясни пожалуйста поподробнее.
 

baev

‹°°¬•
Команда форума
AND ((forum.nik = user.login) OR (forum.nik = "ЧЕГО_ТАМ_У_ВАС_ПИШЕТСЯ_ДЛЯ_НЕЗАРЕГИСТРИРОВАННОГО_ПОЛЬЗОВАТЕЛЯ"))
 

Кром

Новичок
>id индивидуально для каждого сообщения

И значит, что у каждого индивидуального сообщения есть пользователь, который его написал. Вот и добавь туда его id.
 

jenia

Новичок
baev
Твой вариант я уже пробовал, как я понимаю он правильный. Но у меня возникает ошибка при использовании такой конструкции:
while ($line = mysql_fetch_array($result_theme, MYSQL_ASSOC)) {
print "<tr><td align=left width=200><b><font color=black size=3>".$nik."</font></b><br>Сообщений: 0<br>Статус пользователя: guest<br>".$line['forum_date']."</td><td>".$line['text']."</td></tr>";
}
Ошибка такого вида:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\www\sites\mis\html\forum\scripts.php on line 196.

Кром
Я в принципе не против связать по id, но как я понимаю будет возникать такая же ошибка, как и сейчас. И ещё вопрос: как мне связывать по id сообщения гостей форума? Гости тоже могут писать сообщения, но их (гостей) нету в таблице user. Что с этим делать? Создать одну отдельную запись для гостей в таблице user, или как?
 

Фанат

oncle terrible
Команда форума
эта ошибка происходит, если запрос выполнился с ошибкой.
сначала отладь запрос, а потом уже вставляй его в пхп код
 

jenia

Новичок
Фанат
Запрос выглядит так:
SELECT *, forum.date as forum_date, user.date as user_date, forum.status as forum_status, user.status as user_status, forum.id as forum_id, user.id as user_id FROM forum, user WHERE forum.theme = '$theme' AND ((forum.nik = user.login) (OR forum.status = guest)) ORDER BY forum_date;
Причём, когда в таблице user присутствует пользователь который написал сообщение, то ошибок нет.
Подскажи пожалуйста, где ошибка в запросе, а то я в упор не вижу.
 

Фанат

oncle terrible
Команда форума
это не запрос. это пхп код.
запрос мне показывать не надо.
у меня в голове интерпретатора SQL нету.
а запрос надо показыать интерпретатору.
это он тебе скажет, где ошибка
 

jenia

Новичок
Всем спасибо. Во всём разобрался. Правильный вид запроса для моего случая такой:
SELECT *, forum.date as forum_date, user.date as user_date, forum.status as forum_status, user.status as user_status, forum.id as forum_id, user.id as user_id FROM forum, user WHERE forum.theme = '$theme' AND ((forum.nik = user.login) OR (forum.status = user.status)) ORDER BY forum_date;
 
Сверху