SQL用户定义的变量作为SQL查询

时间:2014-01-13 00:19:49

标签: mysql join

我正在尝试创建一个动态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);   

1 个答案:

答案 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

这里的技巧是将结构化放在结构化查询语言中,意识到你可以使用虚拟表,也称为子查询,你可以使用任何地方表