【问题标题】:Accessing two different tables for one loop一个循环访问两个不同的表
【发布时间】:2015-05-20 11:28:50
【问题描述】:

我有一个小问题,我想不通。

我必须在一个循环中从两个不同的表中提取数据。我以前从来没有这样做过,所以我不知道怎么做。我尝试了两个不同的查询。看起来像这样:

$query = "SELECT * FROM colors ";
$color_select = mysqli_query($connection, $query);

$second_query = "SELECT * FROM votes";
$vote_select = mysqli_query($connection, $second_query);

然后将它们放入一个循环中:

 while($row = mysqli_fetch_assoc($color_select) && $second_row = mysqli_fetch_assoc($vote_select))
{
 $color = $row['Colors'];
 $votes = $second_row['Votes'];
 echo "<tr><td>$color</td><td>$votes</td></tr>";
}

但这没有用。没想到,就是想试试。 :) 也许有经验的人可以帮助我。谢谢。

一天结束时,我需要显示一个表格,它有两列,其中一列包含来自一个 DB 表的颜色名称,另一列包含投票数。

根据要求:表结构。

表格:颜色只有一个字段颜色

表格:投票有四个字段city_idCityColorsVotes

******************************编辑************************ ***************** 所以按照建议修复了查询,但仍然没有显示任何内容。

这里是编辑后的代码:

$query = "SELECT * FROM colors,votes WHERE colors.Colors=votes.Colors"; 
$color_votes_select = mysqli_query($connection, $query); 

while($row = mysqli_fetch_assoc($color_votes_select))
{ $color = $row['Colors']; 
  $votes = $row['Votes']; } 

【问题讨论】:

  • 这两张表有什么关系?
  • 如果color 表与votes 有关系,则使用join
  • @AbhikChakraborty 他们在同一个数据库中
  • 两张表有关系吗?
  • 我的意思是这两个表之间是否有一个公共键,以便您在votes 表中知道哪个投票是哪个颜色?

标签: php html mysql mysqli


【解决方案1】:

如果表有关系。

在单个查询中试试这个。

SELECT
  `colors`.*,votes.*
FROM
  `colors`
INNER JOIN
  `votes` ON
  `votes`.colorId = `colors`.Id

【讨论】:

  • 好的,但是在这种情况下,while 循环如何变化?
  • 您的结果将在单个查询中产生
【解决方案2】:

大多数小鬼 *****你应该有一些表之间的关系

其他解决方法

  1. 对颜色运行查询,将其保存在 ArrayA 中
  2. 对投票运行查询,将其保存在 ArrayB 中
  3. 创建新数组ArrayC

    $arrayC = 数组(); 如果它们都接触相同的行数,则循环数组 A 或 C array_push($ArrayC, 颜色的键和值, 票的键和值);

  4. 最终循环 ArrayC 打印 tr 和 td

【讨论】:

    【解决方案3】:

    首先关联这两个表,在投票表中写入color_id。

    $query = "SELECT * FROM colors,votes where colors.id=votes.color_id";
    
    $color_select = mysqli_query($connection, $query);
    
    while($row = mysqli_fetch_assoc($color_select))
    

    {

     $color = $row['Colors'];
     $votes = $row['Votes'];
    

    }

    【讨论】:

      【解决方案4】:

      试试这个:

      $query = "SELECT colors FROM colors"; 
      $color_select = mysqli_query($connection, $query) or die (mysqli_error());
      
      $second_query = "SELECT votes FROM votes"; //you only need column votes right?
      $vote_select = mysqli_query($connection, $second_query) or die (mysqli_error());;
      
       while( $row = mysqli_fetch_assoc($color_select) && $second_row = mysqli_fetch_assoc($vote_select)){
      
        $color[] = $row['colors'];
       $votes[] = $second_row['votes'];
       echo "<tr><td>$color</td><td>$votes</td></tr>";
       }
      

      简短说明: 它将获取选择并存储到一个数组中(因为您所做的是将多行选择到一个变量中),然后只显示回显。

      【讨论】:

      • 我不想将值存储到变量中。如果是这样的话,你的例子会有所帮助。我只需要回应他们。 :)
      • 你试过了吗?因为最好将它们全部用于以后使用(在这种情况下为回显)。不工作呢?顺便说一句,它应该显示每列的所有颜色和投票,无论它们是否相关。这可以通过查询来改变。
      猜你喜欢
      • 2018-09-19
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2016-04-07
      • 2023-03-04
      • 2018-02-06
      相关资源
      最近更新 更多