douzhu3367 2015-11-21 08:03
浏览 17
已采纳

mysql在where条件中获取数据

I have 3 table now:

First is : member_username

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

Second is : member_data

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

Third is : 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               |
+---------------------------------------------------+

I would like to query data and display the only one uid when member_level is higher in when SUM member_level.level Where fid in 1,2,3.

my query now is like below, but this query is sum all the level including fid 4 also, how to specify only sum in fid 1,2,3? and how do I assign the SUM of member_level.level Where fid in 1,2,3 to $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;

Thank you.

  • 写回答

1条回答 默认 最新

  • douhushen3241 2015-11-21 08:29
    关注

    To filter records having fid values as 1, 2 or 3, use IN statement in WHERE clause. Alias totalLevel in select statement will give you total level for a user.

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置