【问题标题】:select random entry using two columns使用两列选择随机条目
【发布时间】:2012-10-16 14:30:46
【问题描述】:

我创建了一个竞赛,推荐他人的人每次推荐都会增加获胜的几率。现在我必须弄清楚如何使用 mysql 或 php 来实际给他们更好的机会。选择随机行不会削减它。

在我的表中,我有两列,一列用于 ID,一列用于推荐 ID。该表通过将 ID 添加到推荐 ID 字段来跟踪谁推荐了谁,因此前几行数据如下所示:

name   id  referralid 
mark   15   20 
ted    20 
jim    22   20

所以“ted”应该有 3 次获胜的机会,因为他推荐了另外两个人。如何在 mysql 或 php 中做到这一点?

【问题讨论】:

  • 对不起,如果我不清楚,我需要一个 mysql 命令从数据库中获取一个条目,这实际上会给 ted 带来更好的机会。

标签: mysql random


【解决方案1】:
SELECT people.name, people.id
FROM people
LEFT JOIN people referred_people ON referred_people.referralid = people.id
ORDER BY RAND()
LIMIT 1

假设你的桌子被称为 people 这选择

mark
ted
ted
jim

使用臭名昭著的 ORDER BY RAND() 构造随机排序(速度慢,但您没有要求最高性能),然后从该列表中选择一个结果。

【讨论】:

  • 某事不工作....我的查询只返回列名'name'。这里是个新手。 SELECT 'name' FROM register LEFT JOIN registerreferred_register ON referr_register.referral = register.id ORDER BY RAND() LIMIT 1
  • 我将“名称”更改为 *,它正在提取整行信息,但由于某种原因列出了重复的列。
  • 经过编辑以更好地满足您的需求。
【解决方案2】:

试试这个::

您为什么不获取一个随机数并获取该数字的行,然后该行中的refererid指向的id将获胜。

说有了这个给定的数据,说随机数如果生成 1 或 3。 您将 ted 指向这两行。

【讨论】:

    【解决方案3】:
    select a.name,b.Odds
    from (select referralid,count(1) Odds from    yourtable
    group by referralid) b inner join yourtable a
    on a.id=b.referralid
    

    【讨论】:

    • 您可以将case when referralid='' then 1 else 1 end 替换为1。您可以将case when referralid='' then 1 else 0 end 替换为referralid=''。你的意思可能是SUM 而不是COUNT
    • 哦,原来是COUNT(*)你的意思是,好吧。 :)
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多