php - mysql在where条件下获取数据

标签 php mysql

我现在有 3 张 table :

首先是:member_username

+-------------+------------------+
| uid         | username         |
+-------------+------------------+
| 1           | theone           |
| 2           | ohno             |
| 3           | prayforpr        |
+-------------+------------------+

第二个是:member_data

+-------------+-------------------+-----------------+
| uid         | talk              | etc             |
+-------------+-------------------+-----------------+
| 1           | talk1             |                 |
| 2           | talkeee           |                 |
| 3           | iojdfnl           |                 |
+---------------------------------------------------+

第三个是:member_level

+-------------+-------------------+-----------------+
| uid         | level             | fid             |
+-------------+-------------------+-----------------+
| 1           | 2                 | 1               |
| 1           | 10                | 2               |
| 2           | 1                 | 1               |
| 2           | 99                | 2               |
| 1           | 40                | 3               |
| 3           | 50                | 1               |
| 1           | 44                | 4               |
+---------------------------------------------------+

我想查询数据并显示当 SUM member_level.level 其中 fid 为 1,2,3 时 member_level 较高时的唯一一个 uid。

我现在的查询如下所示,但是这个查询是所有级别的总和,包括fid 4,如何仅指定fid 1,2,3中的总和?以及如何将 1,2,3 中的 member_level.levelWhere fid 的总和分配给 $levelKingTotalLevel?

$levelKing = DB::query("SELECT t1.uid,t1.username,t2.talk FROM ".DB::table('member_level')." t3 JOIN ".DB::table('member_username')." t1 ON(t3.uid = t1.uid) JOIN ".DB::table('member_data')." t2 ON (t1.uid = t2.uid) GROUP BY t3.uid ORDER BY SUM(t3.level) DESC LIMIT 1");

while($rowlevelKing = DB::fetch($levelKing)) {
    $levelKingTotalLevel = $rowlevelKing['???'];
    $levelKingN = $rowlevelKing['username'];
    $levelKingUID = $rowlevelKing['uid'];
    $levelKingT = $rowlevelKing['talk'];
};
echo "The ".$levelKingN." total level is ".$levelKingTotalLevel." and he talk about ".$levelKingT;

谢谢。

最佳答案

要过滤 fid 值为 1、2 或 3 的记录,请在 WHERE 子句中使用 IN 语句。 select 语句中的别名 totalLevel 将为您提供用户的总级别。

SELECT t1.uid, t1.username, t2.talk, SUM(t3.level) AS totalLevel
FROM member_level t3
JOIN member_username t1
ON (t3.uid = t1.uid)
JOIN member_data t2
ON (t1.uid = t2.uid)
WHERE t3.fid IN (1,2,3)
GROUP BY t3.uid
ORDER BY totalLevel DESC
LIMIT 1

关于php - mysql在where条件下获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33841121/

相关文章:

php - JOIN 表 MySQL 未在 PHP 中加入

php - 如何使用可互换字母获取单词的所有可能变体?

javascript - Yii Form 的 Angular 表单验证

PHP pdo mysql的默认字符集是什么

android - 为什么不直接将android连接到数据库?

PHP While 循环 - 变量将仅在最后一个条目上传递

php - mysql 搜索 % 和 $ 字符无结果

php - 在VerifyCsrfToken.php中处理TokenMismatchException,在Laravel 5中刷新页面

php - 我如何向这些数据库表添加列或添加全新的数据库表,然后将结果插入适当的 html 表格单元格?

php mysql 通过 cron 更新