SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.12.2007 11:19:36

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Unknown column 't.objav_id' in 'on clause'

Прошу помощи.
Вот такая ошибка

           

Код:

 Unknown column 't.objav_id' in 'on clause'

сам код вот
       

Код:

 "SELECT f.*, COUNT(t.thread_id) AS thread_count, MAX(t.thread_lastpost) AS last_post, f2.objav_name AS objav_cat_name, u.user_id, u.user_name FROM ".$db_prefix."objavs f
        LEFT JOIN ".$db_prefix."threads t USING(objav_id)
        LEFT JOIN ".$db_prefix."objavs f2 ON f.objav_cat = f2.objav_id
        LEFT JOIN ".$db_prefix."users u ON f.objav_lastuser = u.user_id
        WHERE ".groupaccess('f.objav_access')." AND f.objav_cat!='0' GROUP BY objav_id ORDER BY f2.objav_order ASC, f.objav_order ASC"

познаний в mysql практически 0 
Что означает сама запись в запросе к базе   

Код:

 f.objav_access

, у меня в таблице нет такой строки.
Помоготе разобраться.

Неактивен

 

#2 05.12.2007 11:29:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Unknown column 't.objav_id' in 'on clause'

Видимо в том и причина, что некоторых колонок в таблицах нет.

Пришлите пожалуйста структуру таблиц - результат выполнения:
SHOW CREATE TABLE threads;
SHOW CREATE TABLE objavs;
SHOW CREATE TABLE users;

Неактивен

 

#3 05.12.2007 12:29:42

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Re: Unknown column 't.objav_id' in 'on clause'

Есть файлы форума phpFusion. Мне требуется сделать два независимых форума, вернее хочу один переделать под другие нужды на том же сайте.
Коппирую папку форума, копирую все таблицы базы, папку и таблицы переименовываю из forum в objav и obj_forum в obj_objav.
В папке objav переписываю все обращения с forum на objav по запросам базы.

Вот часть исходника :

Код:

echo "<table cellpadding='0' cellspacing='0' width='100%' class='tbl-border'>
<tr>
<td>
<table border='0' cellpadding='0' cellspacing='1' width='100%'>
<tr>
<td colspan='2' class='tbl2'>".$locale['401']."</td>
<td align='center' width='50' class='tbl2'>".$locale['402']."</td>
<td align='center' width='50' class='tbl2'>".$locale['403']."</td>
<td width='120' class='tbl2'>".$locale['404']."</td>
</tr>\n";

$forum_list = ""; $current_cat = "";
$result = dbquery(
        "SELECT f.*, COUNT(t.thread_id) AS thread_count, MAX(t.thread_lastpost) AS last_post, f2.forum_name AS forum_cat_name, u.user_id, u.user_name FROM ".$db_prefix."forums f
        LEFT JOIN ".$db_prefix."threads t USING(forum_id)
        LEFT JOIN ".$db_prefix."forums f2 ON f.forum_cat = f2.forum_id
        LEFT JOIN ".$db_prefix."users u ON f.forum_lastuser = u.user_id
        WHERE ".groupaccess('f.forum_access')." AND f.forum_cat!='0' GROUP BY forum_id ORDER BY f2.forum_order ASC, f.forum_order ASC"
);
if (dbrows($result) != 0) {
        while ($data = dbarray($result)) {
                if ($data['forum_cat_name'] != $current_cat) {
                        $current_cat = $data['forum_cat_name'];
                        echo "<tr>\n<td colspan='5' class='forum-caption'>".$data['forum_cat_name']."</td>\n</tr>\n";
                }
                $moderators = "";
                if ($data['forum_moderators']) {
                        $res = "user_id='".str_replace(".", "' OR user_id='", $data['forum_moderators'])."'";
                        $result2 = dbquery("SELECT user_id,user_name FROM ".$db_prefix."users WHERE (".$res.")");
                        while ($data2 = dbarray($result2)) {
                                if ($moderators) $moderators .= ", ";
                                $moderators .= "<a href='".BASEDIR."profile.php?lookup=".$data2['user_id']."'>".$data2['user_name']."</a>";
                        }
                }
                if ($data['last_post'] > $lastvisited) {
                        $fim = "<img src='".THEME."forum/foldernew.gif' alt='".$locale['560']."'>";
                } else {
                        $fim = "<img src='".THEME."forum/folder.gif' alt='".$locale['561']."'>";
                }
                echo "<tr>

вот та же часть того что получилось :

Код:

echo "<table cellpadding='0' cellspacing='0' width='100%' class='tbl-border'>
<tr>
<td>
<table border='0' cellpadding='0' cellspacing='1' width='100%'>
<tr>
<td colspan='2' class='tbl2'>".$locale['401']."</td>
<td align='center' width='50' class='tbl2'>".$locale['402']."</td>
<td align='center' width='50' class='tbl2'>".$locale['403']."</td>
<td width='120' class='tbl2'>".$locale['404']."</td>
</tr>\n";

$objav_list = ""; $current_cat = "";
$result = dbquery(
        "SELECT f.*, COUNT(t.thread_id) AS thread_count, MAX(t.thread_lastpost) AS last_post, f2.objav_name AS objav_cat_name, u.user_id, u.user_name FROM ".$db_prefix."objavs f
        LEFT JOIN ".$db_prefix."threads t USING(objav_id)
        LEFT JOIN ".$db_prefix."objavs f2 ON f.objav_cat = f2.objav_id
        LEFT JOIN ".$db_prefix."users u ON f.objav_lastuser = u.user_id
        WHERE ".groupaccess('f.objav_access')." AND f.objav_cat!='0' GROUP BY objav_id ORDER BY f2.objav_order ASC, f.objav_order ASC"
);
if (dbrows($result) != 0) {
        while ($data = dbarray($result)) {
                if ($data['objav_cat_name'] != $current_cat) {
                        $current_cat = $data['objav_cat_name'];
                        echo "<tr>\n<td colspan='5' class='forums-caption'>".$data['objav_cat_name']."</td>\n</tr>\n";
                }
                $moderators = "";
                if ($data['objav_moderators']) {
                        $res = "user_id='".str_replace(".", "' OR user_id='", $data['objav_moderators'])."'";
                        $result2 = dbquery("SELECT user_id,user_name FROM ".$db_prefix."users WHERE (".$res.")");
                        while ($data2 = dbarray($result2)) {
                                if ($moderators) $moderators .= ", ";
                                $moderators .= "<a href='".BASEDIR."profile.php?lookup=".$data2['user_id']."'>".$data2['user_name']."</a>";
                        }
                }
                if ($data['last_post'] > $lastvisited) {
                        $fim = "<img src='".THEME."forum/foldernew.gif' alt='".$locale['560']."'>";
                } else {
                        $fim = "<img src='".THEME."forum/folder.gif' alt='".$locale['561']."'>";
                }
                echo "<tr>

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

Код:

prefix."objavs f2 ON f.objav_cat = f2.objav_id

f2  и f. - это как обрабатывается мне не понять без объяснения.

Неактивен

 

#4 05.12.2007 12:52:05

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Unknown column 't.objav_id' in 'on clause'

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

Неактивен

 

#5 05.12.2007 14:23:00

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Re: Unknown column 't.objav_id' in 'on clause'

Да нет база таже осталась, что и была. Я измени коппию таблиц с obj_forum на obj_objav и все колонки таблицы , было obj_firum > forum_id , forum_user  стало obj_objav > objav_id, objav_user.
Т.е. осталось всё однотипоно как и было, в файле тоже пришлось поменять на запросы из новой таблицы,
можете мне объяснить что такое f2 и f.    таких таблиц нет в помине, как это работает?

Отредактированно resset (05.12.2007 14:28:34)

Неактивен

 

#6 05.12.2007 14:43:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Unknown column 't.objav_id' in 'on clause'

f2 и f это алиасы к таблице ".$db_prefix."objavs
t это алиас к таблице ".$db_prefix."threads -  в этой таблице у Вас отсутствует колонка objav_id

Неактивен

 

#7 05.12.2007 14:56:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Unknown column 't.objav_id' in 'on clause'

resset написал:

Что означает сама запись в запросе к базе   

Код:

 f.objav_access

, у меня в таблице нет такой строки.
Помоготе разобраться.

При обращении к столбцу можно указывать `полное имя столбца` - база.таблица.столбец или таблица.столбец как в данном случае
В качестве имени таблицы можно использовать алиас. В данном случае f это таблица ".$db_prefix."objavs


Видимо, проблема возникла от того, что Вы переименовали в базе не все столбцы, в результате в таблице ".$db_prefix."threads отсутствует колонка objav_id

Неактивен

 

#8 05.12.2007 15:24:55

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Re: Unknown column 't.objav_id' in 'on clause'

В таблице threads есть колонка forum_id по аналогии создал колонку objav_id
теперь показывает три ошибки с колонкой objav_id   

Код:

Unknown column 'objav_id' in 'where clause'
Unknown column 'objav_id' in 'where clause'
Unknown column 'objav_id' in 'where clause'

Не получилось, но по любому спасибо, это я и искал.

Как эти алиасы прописываются? Почему, скажем f2 , а не d2 или o32  ? это связано с названием таблицы?

Отредактированно resset (05.12.2007 16:01:05)

Неактивен

 

#9 05.12.2007 15:58:49

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Unknown column 't.objav_id' in 'on clause'

Проще наверное не менять названия таблиц и колонок, а изменить переменную $db_prefix, тогда все таблицы будут иначе называться (так как будут иметь другой префикс, а программу менять не придется).

Неактивен

 

#10 05.12.2007 16:14:50

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Re: Unknown column 't.objav_id' in 'on clause'

rgbeast написал:

Проще наверное не менять названия таблиц и колонок, а изменить переменную $db_prefix, тогда все таблицы будут иначе называться (так как будут иметь другой префикс, а программу менять не придется).

У меня по всему сайту одна переменная префикса , поменяв её ещё больше запутаюсь и смысл в том что нужно использовать не один форум а два одинаковых, т.е. PunBB  скопировать в папку forum1 и немного переделав, заставить работать как доска объявлений скажем.

Как эти алиасы прописываются? Почему, скажем f2 , а не d2 или o32  ? это связано с названием таблицы?

Неактивен

 

#11 05.12.2007 16:16:19

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Unknown column 't.objav_id' in 'on clause'

Алиасы даются в самом запросы после имени таблицы. Имена алиасов вообще говоря произвольны.

Неактивен

 

#12 05.12.2007 16:38:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Unknown column 't.objav_id' in 'on clause'

resset написал:

В таблице threads есть колонка forum_id по аналогии создал колонку objav_id
теперь показывает три ошибки с колонкой objav_id   

Код:

Unknown column 'objav_id' in 'where clause'
Unknown column 'objav_id' in 'where clause'
Unknown column 'objav_id' in 'where clause'

А тот ли запрос приводит теперь к этим ошибкам?


resset написал:

У меня по всему сайту одна переменная префикса , поменяв её ещё больше запутаюсь и смысл в том что нужно использовать не один форум а два одинаковых, т.е. PunBB  скопировать в папку forum1 и немного переделав, заставить работать как доска объявлений скажем.

Что значит `одинаковые` форумы? Они ведь используют разные таблицы, так почему бы просто не изменить переменную $db_prefix. Теперь же Вам надо искать в коде где ещё возникают ошибки.

Неактивен

 

#13 05.12.2007 23:25:36

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Re: Unknown column 't.objav_id' in 'on clause'

Видимо ещё какие таблицы не отследил и не переименовал, попробую воспользоваться заменой префикса.
спасибо.

Неактивен

 

#14 06.12.2007 02:23:04

resset
Участник
Зарегистрирован: 05.12.2007
Сообщений: 7

Re: Unknown column 't.objav_id' in 'on clause'

Префикс сменил, переменные переписал (намного меньше)
Пока всё работает, только в инсталятор впихивать как то надо.
Спасибо ещё раз smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson