- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个简单的网站,让我的工作人员可以使用 Jquery 可拖动脚本轻松地将员工姓名与其婴儿照片相匹配。
我有两个表(USERS 和 ENTRIES)。有一个名为 PEOPLE 的第三个表,但它对于这个问题并不重要。
在条目中,“0”的用户 ID 具有正确的顺序(即 personid 1 应该是第 4 个,personid 2 应该是第 3 个,等等。同样,personid 来自另一个名为 PEOPLE 的表,对于这个问题来说应该不重要)。
+----------+---------+--------------+
| userid |firstname| lastname
+----------+---------+--------------+
| 1 | Bob | Wilson |
| 2 | Charlie | Jackson |
| 3 | Jim | Smith |
| 4 | Doug | Jones |
+----------+---------+--------------+
+----------+---------+--------------+
| userid | personid| ordering
+----------+---------+--------------+
| 0 | 1 | 4 |
| 0 | 2 | 3 |
| 0 | 3 | 1 |
| 0 | 4 | 2 |
| 1 | 1 | 2 |
| 1 | 2 | 4 |
| 1 | 3 | 1 |
| 1 | 4 | 3 |
| 2 | 1 | 1 |
| 2 | 2 | 3 |
| 2 | 3 | 4 |
| 2 | 4 | 2 |
+----------+---------+--------------+
实际上,我可能有 100 个用户,其条目表中有条目。每个用户将有 100 个有订单的 personid。我想要做的是,以最有效、最合乎逻辑的方式,循环遍历所有条目并将每个条目与正确的答案(即 userid 0)进行比较。
所以我的想法可能是获取数组中的所有条目,然后将用户 ID 1 的数组与用户 ID 0 的数组进行比较。然后将用户 ID2 的数组与用户 ID 0 的数组进行比较。依此类推。
我只是想比较每个后续用户有多少个正确答案。因此,在我的示例表中,userid 1 有一个正确答案(Personid 3 与排序 1 匹配),而 userid 2 有两个正确答案(personid 2 与排序 3 匹配,personid 4 与排序 2 匹配)。
我第一次这样做...
$sql = "SELECT * FROM entries";
$getpeople = mysqli_query($connection, $sql);
if (!$getpeople) {
die("Database query failed: " . mysqli_error($connection));
} else {
while ($row = mysqli_fetch_array($getpeople)) {
$entriesarray[$row['userid']][$row['personid']]=$row['ordering'];
}
}
这将为我提供一堆包含所有用户及其条目的数组。
然后我做了这个作为测试......
$result_array = array_intersect_assoc($entriesarray[1], $entriesarray[0]);
print_r($result_array);
echo "COUNTRIGHT=".count($result_array);
这基本上通过给我“1”的 COUNTRIGHT 来实现我想要的。它查看用户 ID 1 的数组中有多少与用户 ID 0 的数组中的值和键相匹配(同样,正确的答案数组)。
但现在我很困惑如何在一个好的循环中有效地完成此操作,而不是必须一项一项地完成。同样,我可能需要循环访问 100 个用户。我怀疑上面的初始 mySQL 查询是否正确或者应该以不同的方式完成。
最终,我想列出所有用户的名字、姓氏以及他们正确的号码。并按他们正确的数字对它们进行 DESC 排序。本质上,它是一个排行榜,看起来像......
Jim Smith 2
Charlie Wilson 1
and so on (but on a much greater scale where the person in first place will probably have around 80 or 90 correct).
因为我也想在“排行榜”上显示名字,所以我知道我需要在这里的某个地方进行 JOIN 才能从 USERS 表中获取该信息,因此对于我的小大脑来说,它变得更加复杂:)
我希望这对某人有意义。如果有人能指出我正确的方向,那就太好了。我快疯了,到最后这可能相当简单。
谢谢!
最佳答案
下面的查询将通过左连接到用户 0
并计算每个人的排序匹配来为您提供每个用户的正确条目数
select t1.userid, count(t2.*)
from entries t1
left join entries t2 on t2.userid = 0
and t2.personid = t1.personid
and t2.ordering = t1.ordering
group by t1.userid
如果您需要用户表中的名称,您可以加入它
select u.*, count(t2.*)
from entries t1
join users u on u.userid = t1.userid
left join entries t2 on t2.userid = 0
and t2.personid = t1.personid
and t2.ordering = t1.ordering
group by u.userid
关于php - 首先创建一堆数组,然后循环遍历它们的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33590436/
我是一名优秀的程序员,十分优秀!