Задавайте вопросы, мы ответим
Вы не зашли.
Прошу помощи.
Вот такая ошибка
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
, у меня в таблице нет такой строки.
Помоготе разобраться.
Неактивен
Видимо в том и причина, что некоторых колонок в таблицах нет.
Пришлите пожалуйста структуру таблиц - результат выполнения:
SHOW CREATE TABLE threads;
SHOW CREATE TABLE objavs;
SHOW CREATE TABLE users;
Неактивен
Есть файлы форума 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. - это как обрабатывается мне не понять без объяснения.
Неактивен
Вам не надо менять код программы. Вы изменили имя базы данных, а не таблиц, поэтому достаточно просто изменить имя базы в конфигурационном файле
Неактивен
Да нет база таже осталась, что и была. Я измени коппию таблиц с 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)
Неактивен
f2 и f это алиасы к таблице ".$db_prefix."objavs
t это алиас к таблице ".$db_prefix."threads - в этой таблице у Вас отсутствует колонка objav_id
Неактивен
resset написал:
Что означает сама запись в запросе к базе
Код:
f.objav_access, у меня в таблице нет такой строки.
Помоготе разобраться.
При обращении к столбцу можно указывать `полное имя столбца` - база.таблица.столбец или таблица.столбец как в данном случае
В качестве имени таблицы можно использовать алиас. В данном случае f это таблица ".$db_prefix."objavs
Видимо, проблема возникла от того, что Вы переименовали в базе не все столбцы, в результате в таблице ".$db_prefix."threads отсутствует колонка objav_id
Неактивен
В таблице 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)
Неактивен
Проще наверное не менять названия таблиц и колонок, а изменить переменную $db_prefix, тогда все таблицы будут иначе называться (так как будут иметь другой префикс, а программу менять не придется).
Неактивен
rgbeast написал:
Проще наверное не менять названия таблиц и колонок, а изменить переменную $db_prefix, тогда все таблицы будут иначе называться (так как будут иметь другой префикс, а программу менять не придется).
У меня по всему сайту одна переменная префикса , поменяв её ещё больше запутаюсь и смысл в том что нужно использовать не один форум а два одинаковых, т.е. PunBB скопировать в папку forum1 и немного переделав, заставить работать как доска объявлений скажем.
Как эти алиасы прописываются? Почему, скажем f2 , а не d2 или o32 ? это связано с названием таблицы?
Неактивен
Алиасы даются в самом запросы после имени таблицы. Имена алиасов вообще говоря произвольны.
Неактивен
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. Теперь же Вам надо искать в коде где ещё возникают ошибки.
Неактивен
Видимо ещё какие таблицы не отследил и не переименовал, попробую воспользоваться заменой префикса.
спасибо.
Неактивен
Префикс сменил, переменные переписал (намного меньше)
Пока всё работает, только в инсталятор впихивать как то надо.
Спасибо ещё раз
Неактивен