[英]how to get a value of a field from first query and use it in second query
[英]How get multiple values from first mysql table and use it in second query?
表格1
id | author | number_of_view |
---+--------------+-----------------
1 | john | 10
2 | Jack | 20
3 | Anna | 80
4 | Neri | 100
下面有一个PHP脚本,用于检查MySQL数据库表并向用户提供徽章。 该脚本可以完美运行。
$from1=10;
$to1=15;
$from2=20;
$to2=30;
$query=mysql_query("SELECT SUM( number_of_view ) AS view_number, author FROM `table1` GROUP BY author");
while ($row= mysql_fetch_array($query))
{
$view_number=$row['view_number'];
$author=$row['author'];
if ($viewnumber>$from1 && $viewnumber<=$to1)
{
echo "special user";
}
elseif ($viewnumber>$from2 && $viewnumber<=$to2)
{
echo "plain user";
}
}
}
但是问题是我想从数据库表中获取$from
和$to
变量值:
表2
id | badge | from |to
---+-------------+------+---
1 | special user| 10 |15
2 | plain user | 20 |30
这是第二个查询和第二个表的PHP脚本:
$query2=mysql_query("SELECT * FROM table2");
while ($row= mysql_fetch_array($query2)) {
$badgeName=$row['view_number'];
//I would like to use this variable above. So instead of "echo 'special user';" I would like use "echo $badgeName" $from=$row['author'];
// I would like to use this variable above instead of $from1 and $from2 $to=$row['to'];
// I would like to use this variable above instead of $to1 and $to2 }
我怎样才能做到这一点?
我本来以为这很简单,但是我误会了,因为您需要注意一些复杂的因素。
首先,您必须对两个表进行叉积运算。 最干净的方法是在FROM
语句中有两个表。 您将获得如下内容:
SELECT SUM(number_of_view) AS view_number, author, badge
FROM table1, table2
对于每个徽章,这将从第一张表的每一行开始一次。 我们还没有总结视图,所以这是我们下一步要做的。 第一次尝试是这样的:
SELECT SUM(number_of_view) AS view_number, author, badge
FROM table1, table2
GROUP BY number_of_view
但是,您现在将看到视图计数不正确,并且每人只能看到一个徽章,而我们希望每个用户的每个徽章都带有一行。 实际上,标记也被分组,这就是为什么显示的number_of_view是实际视图数乘以系统中标记数的原因。 为了解决这个问题,我们确实将徽章添加到“分组”列中,因此不会被其他结果压榨:
SELECT SUM(number_of_view) AS view_number, author, badge
FROM table1, table2
GROUP BY number_of_view, badges
如果您的第二个表有一个id列,我会改用它,因为它的性能更好(这取决于用于badge字段的实际类型),但是表中没有任何东西,因为Give确实起作用。
现在,我们需要过滤掉用户尚未获得的徽章,以确保只剩下正确的徽章。 这将是这样的:
SELECT SUM(number_of_view) AS view_number, author, badge
FROM table1, table2
GROUP BY number_of_view, badges
HAVING number_of_view >= table2.`from`
AND number_of_view < table2.to
(请注意,由于它是SQL中的关键字,因此我不得不从中进行转义。)但是,在这里我们将发现查询不知道table2.from列。 这是因为查询的HAVING
部分不会查看表( WHERE
),而是查看所选的列(因为这是GROUP BY
过滤的)。 因此,我们需要将这些列添加到选定的列中:
SELECT SUM(number_of_view) AS view_number, author, badge, `from`, to
FROM table1, table2
GROUP BY number_of_view, badges
HAVING number_of_view >= table2.`from`
AND number_of_view < table2.to
我们终于得到了想要的东西。 您可以在此处查看正在使用的查询: http : //sqlfiddle.com/#!8/e78c8/1
您应该在两个表之间运行一个JOIN查询。 我已将table2字段名称从“ from”和“ to”修改为“ start”和“ end”,因为FROM是保留字。
SELECT author, number_of_view, badge
FROM authors LEFT JOIN scores
ON score >start AND score < end
请注意,即使表2中没有匹配项,上述JOIN查询也将返回表1中的所有结果。 在这种情况下,徽章值将为NULL。 如果您不想获得这些值,则可以用INNER JOIN替换LEFT JOIN。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.