gpt4 book ai didi

php - 如何从第一个mysql表获取多个值并在第二个查询中使用它?

转载 作者:行者123 更新时间:2023-11-29 13:40:26 24 4
gpt4 key购买 nike

表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 是实际 View 数量乘以系统中的徽章数量。为了解决这个问题,我们将徽章添加到按列分组中,这样它就不会被挤压到其他结果中:

SELECT SUM(number_of_view) AS view_number, author, badge
FROM table1, table2
GROUP BY number_of_view, badges

如果你的第二个表有一个 id 列,我会使用它,因为它的性能更好(有点取决于用于徽章字段的实际类型),但是表中没有给定的列,这确实工作。

现在,我们需要过滤掉用户未获得的徽章,以确保只留下正确的徽章。这会是这样的:

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

(请注意,我必须转义 from,因为它是 SQL 中的关键字。)不过,在这里我们会发现查询不知道 table2.from 列。这是因为查询的 HAVING 部分不会查看表(WHERE 就是这样做的),而是查看选定的列(因为这是通过分组依据)。因此,我们需要将这些列添加到选定的列中:

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

关于php - 如何从第一个mysql表获取多个值并在第二个查询中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18157561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com