Я работаю с форумами vBulletin и пытаюсь получить результаты из одной таблицы, если она существует в другой таблице.
Это создание таблицы данных из
$db->query("ALTER TABLE " . TABLE_PREFIX . "drc_settings ADD thread_ids varchar(50) NOT NULL default '0'");
Я создал поле ввода, предназначенное для номеров, разделенных запятыми (идентификаторы потоков). Это подчиняется этому столбцу, поэтому результат в этом столбце будет выглядеть так:
1,46,23
Другой столбец в этой таблице — это threadid, это тема, из которой было отправлено сообщение.
Итак, это то, что мы имеем в таблице drc_settings
threadid thread_ids
5 1,46,23
Теперь существует еще одна таблица — thread, в таблице thread у нас есть:
threadid title
46 Some Title
Что мне нужно знать, как я могу получить заголовок из потока, если thread_ids или drc_settings соответствуют threadid потока?
Это то, где я нахожусь с этим, но я немного вне своего элемента в этом.
$res = $post['thread_ids'];
$res = explode (',', $res);
$post['drcid'] = '<ul>';
foreach ( $res as $ret ) {
$db->query("SELECT
thread.threadid, drc.threadid AS threadid,
thread.threadid, thread.title AS threadtitle
FROM " . TABLE_PREFIX . "thread AS thread
LEFT JOIN " . TABLE_PREFIX . "drc_settings AS drc ON (drc.threadid=thread.threadid)
WHERE thread.threadid VAR (" . $ret . ")
");
$post['drcid'] .= '<li><a href="showthread.php?t=' . $ret . '">'. $thread[threadtitle] .'</a></li>';
}
$post['drcid'] .= '</ul>';
Если я удалю запрос из foreach, я смогу получить $ res для возврата 1 46 23
что озадачивает меня, почему запрос не работает должным образом.
Конечным результатом будет список ссылок на каждый поток, указанный во входных данных, I.E:
Это ошибка, возвращенная с текущей настройкой, которую я имею
Database error in vBulletin 3.8.9:
Invalid SQL:
SELECT
thread.threadid, drc.threadid AS threadid,
thread.threadid, thread.title AS threadtitle
FROM thread AS thread
LEFT JOIN drc_settings AS drc ON (drc.threadid=thread.threadid)
WHERE thread.threadid VAR (1);
MySQL Error : You have an error in your SQL syntax;
Используя $ ret (родительский нить) …
$query="SELECT B.threadid,B.title
FROM drc.settings A
LEFT JOIN thread B
ON FIND_IN_SET(B.threadid,A.threadids)
WHERE A.threadid={$ret};"
Затем выполните цикл по результирующему набору, чтобы создать массив $ post.
Других решений пока нет …