FOREACH sql表项从另一个表获取结果

时间:2017-02-21 01:11:41

标签: php mysql sql foreach vbulletin

我正在使用vBulletin论坛,我试图从一个表中获取结果,如果它存在于另一个表中。

这是数据来自

的表的创建
$db->query("ALTER TABLE " . TABLE_PREFIX . "drc_settings ADD thread_ids varchar(50) NOT NULL default '0'");

我创建了一个输入字段,用于逗号分隔的数字(线程ID' s)。提交到此列,因此此列中的结果如下所示:

1,46,23

此表中的另一列是threadid,这是帖子提交的帖子。

所以这就是我们在drc_settings表中的内容

threadid  thread_ids
   5       1,46,23

现在另一个存在的表是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;

1 个答案:

答案 0 :(得分:0)

使用$ 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数组。