【发布时间】:2021-07-26 00:14:24
【问题描述】:
我正在使用 PHP 创建一个表格来显示预测器的名称以及他们做出了多少成功的预测和多少不成功的预测。
结果应该是这样的。
| Predictor Name | Predictor Record (Wins/Losses) |
|---|---|
| name1 | 0/0 |
| name2 | 0/0 |
PHP 事实上,我对如何设置有点迷茫。
<table class="table-styling">
<tr>
<th>Predictor Name</th>
<th>Full Record (Wins/Losses)</th>
</tr>
<?php
$sql = 'SELECT predictors.predictor_id, predictors.predictor_name, predictions.base_prediction, matches.base_result, predictions.specific_prediction,
matches.specific_result, predictions.super_specific_prediction, matches.super_specific_result
FROM predictions
INNER JOIN matches ON matches.match_id = predictions.match_id
INNER JOIN predictors ON predictors.predictor_id = predictions.predictor_id';
$results = $mysqli->query($sql);
if($results->num_rows) {
while ($row = $results->fetch_object()) {
echo "<tr>
<td>$row->predictor_name</td>
<td>$basePredictionWins/$basePredictionLosses</td>
</tr>";
}
if ($row->base_result === $row->base_prediction) {
$basePredictionWins = array_count_values($results);
}
if ($row->base_result !== $row->base_prediction) {
$basePredictionLosses = array_count_values($results);
}
}
?>
</table>
主要问题似乎是这些 IF 语句
if ($row->base_result === $row->base_prediction) {
$basePredictionWins = array_count_values($results);
}
if ($row->base_result !== $row->base_prediction) {
$basePredictionLosses = array_count_values($results);
}
MYSQLi 创建表
Matches
CREATE TABLE `matches` (
`match_id` int(11) NOT NULL AUTO_INCREMENT,
`match_date` date NOT NULL,
`match_name` varchar(50) NOT NULL,
`base_result` varchar(50) NOT NULL,
`specific_result` varchar(50) NOT NULL,
`super_specific_result` varchar(50) NOT NULL,
`sport_id` int(11) NOT NULL,
`organisation_id` int(11) NOT NULL,
PRIMARY KEY (`match_id`),
KEY `match_date` (`match_date`),
KEY `match_name` (`match_name`),
KEY `sport_id` (`sport_id`),
KEY `organisation_id` (`organisation_id`),
KEY `base_result` (`base_result`) USING BTREE,
KEY `specific_result` (`specific_result`) USING BTREE,
KEY `super_specific_result` (`super_specific_result`) USING BTREE,
CONSTRAINT `matches_ibfk_1` FOREIGN KEY (`organisation_id`) REFERENCES `organisation` (`organisation_id`),
CONSTRAINT `matches_ibfk_2` FOREIGN KEY (`sport_id`) REFERENCES `sports` (`sport_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Predictors
CREATE TABLE `predictors` (
`predictor_id` int(11) NOT NULL AUTO_INCREMENT,
`predictor_name` varchar(50) NOT NULL,
PRIMARY KEY (`predictor_id`),
KEY `predictor_name` (`predictor_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Predictions
CREATE TABLE `predictions` (
`prediction_id` int(11) NOT NULL,
`match_id` int(11) NOT NULL,
`predictor_id` int(11) NOT NULL,
`base_prediction` varchar(50) NOT NULL,
`specific_prediction` varchar(50) NOT NULL,
`super_specific_prediction` varchar(50) NOT NULL,
PRIMARY KEY (`prediction_id`),
KEY `match_id` (`match_id`),
KEY `predictor_id` (`predictor_id`),
CONSTRAINT `predictions_ibfk_1` FOREIGN KEY (`predictor_id`) REFERENCES `predictors` (`predictor_id`),
CONSTRAINT `predictions_ibfk_2` FOREIGN KEY (`match_id`) REFERENCES `matches` (`match_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
【问题讨论】:
-
您能否创建一个dbfiddle 并包含一个最小样本数据和与此相对应的预期结果。您是否有意在
if语句中使用赋值=和/=运算符?如果这是一个 1-> many join(至少在匹配上),是否缺少group by? -
嗨,你是对的,我使用 = 而不是 === 和 /= 而不是 !== 使用了错误的匹配语法,我现在已经在问题中编辑了这个。您将如何在此中设置 group by 语句。我对那个 dbfiddle 网站有点迷茫,不知道从哪里开始。