我正在尝试创建一个动态html表,该表由sql数据库中2个表的数据组成。数据库中的一个表将包含模型名称,用户对这些模型的评级以及它们的IP地址,以限制每个IP的评级。另一个表将保存有关模型的信息,例如年龄,位置等。为此,我考虑使用内部联接,以便table1的评级与table2中的正确人员信息相匹配。我对这一切都很陌生,但从我所看到的情况来看,似乎我不能将sql用户定义的变量作为查询。由于持有评级的表格将针对具有不同评级的每个模型具有多个条目,因此我尝试将其解决,以便在我的html表格中显示的评级将是该模型的平均评级。我的第一个问题是确认SQL用户定义变量不能是SQL查询?如果没有,我可以使用什么其他方法在内部联接查询中进行查询?
这有效,但不完全符合我的要求:
$query = "SELECT table2.Rating, table2.Model, table1.Age, table1.Country
FROM table1
INNER JOIN table2
ON table2.Model= table1.Model
ORDER BY table2.Rating DESC
LIMIT 5";
$query5 = mysqli_query($link, $query);
echo "<table border='1'>
<tr>
<th>Rating</th>
<th>Name</th>
<th>Age</th>
<th>Country</th>
</tr>";
while($row = mysqli_fetch_array($query5))
{
echo "<tr>";
echo "<td>" . $row['Rating'] . "</td>";
echo "<td>" . $row['Name'] . "</td>";
echo "<td>" . $row['Age'] . "</td>";
echo "<td>" . $row['Country'] . "</td>";
echo "</tr>";
}
echo "</table>";
我想在上面的内连接中'Model'实际上是DISTINCT,就像这样:
$query = "SELECT DISTINCT Model FROM Table2";
$run = mysqli_query($link, $query);
并且'评级'是AVG('评级'),就像这样:
$query = 'SELECT AVG(Rating) FROM Table2';
$quit = mysqli_query($link, $query);
$run = mysqli_fetch_array($quit);
答案 0 :(得分:0)
看起来您想要使用原始table2
的摘要,如下所示:
SELECT Model, AVG(Rating)
FROM table2
GROUP BY Model
如果我充分了解您的表格结构,那么会为您提供包含每个模型及其平均评分的结果集。所以现在在主查询中使用它代替raw table2。它的工作原理如下:
SELECT a.Rating,
a.Model,
table1.Age, table1.Country
FROM table1
INNER JOIN (
SELECT Model,
AVG(Rating) AS Rating
FROM table2
GROUP BY Model
) AS a ON a.Model= table1.Model
ORDER BY a.Rating DESC
LIMIT 5
这里的技巧是将结构化放在结构化查询语言中,意识到你可以使用虚拟表,也称为子查询,你可以使用任何地方表