从两个表中获取数据并将其收集在数组中并计算一个表结果的行

时间:2018-09-20 22:31:59

标签: php mysql mysqli

我有两个表,分别是fixture_list和OneRecord,其中fixture_list有3列,分别命名为Team1,Team2,player,而OneRecord有诸如Team1,Team2,id,status之类的列,因此在这里我想选择fixture_list的所有数据并将它们放入数组中而我想基于此计算行数,其中fixture_list.Team1 = OneRecord.Team1和 Fixture_list.Team2 = OneRecord.Team2来自OneRecord,实际上我无法区分选择数据并将其放入数组和计算行数之间的区别,因为我只想统计一个记录的行数。我知道可以执行join和mysqli_multi_query()之类的事情,但不知道如何...我想在单个查询中执行此事,请帮忙。

<?php

require_once('connect.php');

$sql = "select * from fixture_list";

if($res = mysqli_query($con,$sql)){
$result = array();

 while($row = mysqli_fetch_array($res)){

array_push($result,
array('players'=>$row[3],
 'team1_name'=>$row[1],
 'team2_name'=>$row[2]
  ));
  }
mysqli_free_result($res);
}
echo json_encode (array("list"=>$result));
mysqli_close($con);
  ?>

1 个答案:

答案 0 :(得分:1)

您可以使用sub_query来执行此操作。我不太了解您的问题(尝试使用大写字母和标点符号),但这应该是使用的格式。

$sql = "SELECT `fixture_list`.`team1_name`,
               `fixture_list`.`team2_name`,
       (
          SELECT count(`OneRecord`.`Team1`) as `total` 
          FROM `OneRecord`
          WHERE `OneRecord`.`Team1` = `fixture_list`.`Team1`
          AND `OneRecord`.`Team2` = `fixture_list`.`Team2`
       )  as `Total_Players`
FROM `fixture_list`
GROU BY `fixture_list`.`id`";

$result = array(); // keep this outside the while loop to ensure the array is made
if($res = mysqli_query($con,$sql)){
  while($row = mysqli_fetch_array($res, MYSQLI_ASSOC)){
    $result[] = $row;
  }
}

这将为您提供一个$ result数组,如下所示:

array(
 'team1_name' => 'TEAMNAME1',
 'team2_name' => 'TEAMNAME2',
 'Total_Players'  => INTEGER_VALUE
)

INTEGER_VALUE是子查询的行数。您可以根据自己的喜好编辑子查询的WHERE部分

然后您可以执行以下操作创建一个json对象:

echo json_encode($result);

这将回显它,如果您将其与Ajax函数一起使用,则非常理想。