PHP/MySQL使前10名脱颖而出
用户可以输入其首选项以查找其他用户。 现在,根据这些输入,我想获得与首选项最匹配的前10名 我想的是: 1) 创建解析用户首选项的select语句PHP/MySQL使前10名脱颖而出,php,mysql,select,Php,Mysql,Select,用户可以输入其首选项以查找其他用户。 现在,根据这些输入,我想获得与首选项最匹配的前10名 我想的是: 1) 创建解析用户首选项的select语句 if ($stmt = $mysqli->prepare("SELECT sex FROM ledenvoorkeuren WHERE userid = you")) $stmt->bind_result($ownsex); 2) 创建一个select语句,检查除您自己以外的所有用户 if ($stmt = $mysqli->pr
if ($stmt = $mysqli->prepare("SELECT sex FROM ledenvoorkeuren WHERE userid = you"))
$stmt->bind_result($ownsex);
2) 创建一个select语句,检查除您自己以外的所有用户
if ($stmt = $mysqli->prepare("SELECT sex FROM ledenvoorkeuren WHERE userid <> you"))
$stmt->bind_result($othersex);
4) 如果首选项匹配->变量+10%,则从值为0的变量开始
问题是,我可以为所有成员这样做,但我如何才能选择前10名???
我想我需要在SQL语句中这样做,但我不知道如何
当然,这只是我的一个偏好,也是我的代码的一个超级简单的版本,但是你会明白的。大概有15个首选项设置
//编辑//
我也想看看屏幕上的比赛评分是多少 在查询中使用
限制
和偏移
:
SELECT sex FROM ledenvoorkeuren WHERE userid = you limit 10 offset 0
这将给出前10位用户的数据。您可以在查询中设置如下限制:
SELECT sex FROM ledenvoorkeuren WHERE userid <> yourid AND sex <> yourpreferredsex limit 0, 10
从Ledenvoorkuren中选择性别,其中用户ID yourid和性别yourPreferred性别限制为0,10
其中“0”是偏移量,“10”是限制
更多信息您可以试试这个
SELECT sex FROM ledenvoorkeuren WHERE userid = you limit 0, 10 order by YOUR_PREFERENCE
嗯,从一开始这是一个很好的问题,所以我对它进行了投票,然后浪费了大约1个小时来制作以下内容:) 数据 我在这里的实验中使用了名为
test
的数据库和名为t
的表
您可以在下面找到显示此表结构的屏幕截图(3个int
列,1个char(1)
列)和完整数据
如您所见,一切都相当简单—我们有4列,id
作为主键,还有一些记录(行)
我们想要实现的目标
我们希望能够根据一些复杂的标准从这个表中选择一组有限的行,包括将几个列的值与所需的参数进行比较
解决方案
我决定为此创建一个函数。SQL语句如下:
use test;
drop function if exists calcMatch;
delimiter //
create function calcMatch (recordId int, neededQty int, neededSex char(1)) returns int
begin
declare selectedQty int;
declare selectedSex char(1);
declare matchValue int;
set matchValue = 0;
select qty, sex into selectedQty, selectedSex from t where id = recordId;
if selectedQty = neededQty then
set matchValue = matchValue + 10;
end if;
if selectedSex = neededSex then
set matchValue = matchValue + 10;
end if;
return matchValue;
end//
delimiter ;
次要解释
函数计算一条特定记录与指定参数集的匹配程度,结果返回int
值。值越大,匹配越好
函数接受3个参数:
- recordId—需要计算结果的记录的id(匹配值)
- neededQty—所需数量。如果记录的数量与之匹配,结果将增加
- neededSex-NeedSex值,如果记录的性别与之匹配,结果将增加
id
specified记录,用0初始化结果匹配值,然后将每个所需列与所需值进行比较。如果比较成功,返回值将增加10
现场测试
所以,希望这能解决你的问题。您可以在自己的项目中随意使用它,添加所需的参数,并将它们与表中所需的列进行比较
干杯 事实上,我不明白,因为你假设我知道你的应用程序,因此你的问题。请更详细地描述您试图构建的内容,好的,因此您登录并希望找到其他人。要做到这一点,你必须给出偏好,比如性别、年龄、省份等。。。然后,根据这些偏好,你会看到最符合你偏好的前十名。在整个人脉数据库中?或者一个更小的集合?看,然后添加一个
LIMIT
子句。谢谢@eggyal,我要看看那篇文章…看起来像我想要的一样:dlimit10确实给了最多10个用户是的。偏移量给用户1-10。但是我如何做匹配的部分。那么,我该如何检查哪些人最符合用户偏好?@Nick你是基于什么原因匹配用户偏好的?你能告诉我吗。好吧,你可以在where子句中添加你的偏好。不要真正理解你的问题。但我想要这样的东西:如果我能设法让它工作,我会试试。我不知道我怎么能用一种简单的方式把它贴在这里。但我会先尝试链接。谢谢你迄今为止的回答,我可能会回复你:PUhm,我明白这个想法,但我如何才能真正按15种偏好订购?有任何例子…因为我还看不到它起作用。那怎么会给我一个匹配的%?
use test;
drop function if exists calcMatch;
delimiter //
create function calcMatch (recordId int, neededQty int, neededSex char(1)) returns int
begin
declare selectedQty int;
declare selectedSex char(1);
declare matchValue int;
set matchValue = 0;
select qty, sex into selectedQty, selectedSex from t where id = recordId;
if selectedQty = neededQty then
set matchValue = matchValue + 10;
end if;
if selectedSex = neededSex then
set matchValue = matchValue + 10;
end if;
return matchValue;
end//
delimiter ;