【问题标题】:Notice undefined_index, using a select with two tables to access the fields of both tables注意 undefined_index,使用带有两个表的 select 来访问两个表的字段
【发布时间】:2014-07-15 15:50:55
【问题描述】:

我正在尝试做一个涉及两个表“新闻和页面”的搜索系统。

我的新闻表:

我的页面表

当用户写一个词并提交表单时,我会选择搜索那个词,我的表格新闻和页面的标题和内容都像那个词。

所以我想选择我的两个表来访问这两个表的字段,因为我想在列表中显示查询结果。

我正在使用这个 sql 语句:

SELECT id_news, thumb, title, content, date, statuss, category FROM news
      WHERE statuss = '%e%' AND title LIKE '%e%' OR content LIKE '%e%' 
UNION 
SELECT id_pag, title_pag, content_pag, link, NULL, NULL, NULL FROM pages
      WHERE title_pag LIKE '%e%' OR content_pag LIKE '%e%' LIMIT 0,10   

我得到了这个:

所以问题是:我想在列表中显示结果,我不想只访问我的新闻领域,我还想访问我的表格页面列。 p>

但是当我这样做时,我只是可以访问我的新闻表列:

if($result['id_pag'] != ''){
    echo '<a href="'.BASE.$result['link'].'">'.$result['title_pag'].'</a>';
 }

我收到此通知:注意:未定义索引:id_pag

这是我的代码:

echo '<ul class="searchlist">';

    $read = $pdo->prepare("SELECT id_news, thumb, title, content, date, statuss, category FROM news
                                WHERE statuss = ? AND title LIKE ? OR content LIKE ? 
                           UNION 
                           SELECT id_pag, title_pag, content_pag, link, NULL, NULL, NULL FROM pages
                                WHERE title_pag LIKE ? OR content_pag LIKE ? LIMIT 0,10 ");
    $read->bindValue(1, '1');
    $read->bindValue(2, "%search%", PDO::PARAM_STR);
    $read->bindValue(3, "%$search%", PDO::PARAM_STR);
    $read->bindValue(4, "%$search%", PDO::PARAM_STR);
    $read->bindValue(5, "%$search%", PDO::PARAM_STR);
    $read->execute();   

    while ($result = $read->fetch(PDO::FETCH_ASSOC)){                   
        echo '<li>';
            if($result['id_news'] != ''){
                echo '<a href="#">';
                    echo '<img src="'.BASE.'/uploads/news/'.$result['thumb'].'"/>';
                echo '</a>';
            }
            if($result['id_pag'] != ''){
                echo '<a href="'.BASE.$result['link'].'">'.$result['title_pag'].'</a>';
            }
        echo '</li>';
    }
echo ' </ul>';

你能帮帮我吗?

【问题讨论】:

  • 您必须使用UNION 的第一个选择的列名。要区分您的行是联合的哪一部分,请在第一列添加一列,即SELECT, ..., 'news' as source ...,第二列添加SELECT ..., 'pages' ...

标签: php mysql sql pdo


【解决方案1】:

使用UNION 时,列名从第一个SELECT 开始使用,其他名称丢失..

如果您需要区分这两组,您可以像这样在查询中添加type 列:

SELECT 'news' `type`, id_news, thumb, title, content, date, statuss, category 
  FROM news
 WHERE statuss = '%e%' AND title LIKE '%e%' OR content LIKE '%e%' 
 UNION 
SELECT 'pages', id_pag, title_pag, content_pag, link, NULL, NULL, NULL 
  FROM pages
 WHERE title_pag LIKE '%e%' OR content_pag LIKE '%e%' LIMIT 0,10

然后您可以使用$result['type'] 作为您的if 条件。

但是,您的两个结果集非常不同,因此我只运行两个查询。它看起来超级hacky。

【讨论】:

  • 感谢您的解决方案,它成功了!也许我会听从你的建议!
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2020-09-23
  • 2020-11-12
  • 2014-09-03
相关资源
最近更新 更多