2017-02-21 17 views
1

Я работаю с форумами форума, и я стараюсь, чтобы получить результаты из одной таблицы, если она существует в другой таблице.FOREACH запись таблицы SQL получить результат из другой таблицы

Это является создание таблицы данных составляет от

$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 

Теперь другая таблица, которая существует, нить, в таблице потоков мы имеем:

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>'; 

Если удалить запрос из Еогеаспа, я могу получить $ Реза вернуть 1 46 23 которая топала почему запрос не работает должным образом.

Конечным результатом будет список ссылок на каждой нити, указанной на входе, IE:

  • Некоторые Название
  • Другой поток
  • Название темы

Это ошибка при текущей настройке у меня есть

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; 
+0

Хранение разделителей списков ключа является ужасным способом проектировал базы данных – RiggsFolly

+0

я не проектировал эту базу данных, ее форум форум программного обеспечение. Я просто создаю для него плагин. Но все, что вам нужно предложить, чтобы улучшить его, я слушаю =) –

+0

Эта структура базы данных, отличная от 1NF, является ошибкой vbulletin. yourmom не создавал структуру, используя только то, что производили другие. Вопрос не был задан вчера? и FIND_IN_SET()? – mickmackusa

ответ

0

Использование $ Ret (родительский ThreadId) ...

$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};" 

Затем цикл через результирующем по мере необходимости, чтобы построить $ после массива.