显示喜欢项目列表中的项目的用户

2024-03-01

我认为这是一个不切实际的问题,但我想得到一些反馈来确认。

我有一个产品和用户数据库,用户可以在其中喜欢产品,喜欢的数据存储在仅包含 pid 和 uid 的参考表中。

客户请求是显示喜欢产品列表中每个产品的 3 位用户。

问题是,不可能在产品列表的一次查询中获取这些数据,

我曾经实现并随后取消实现的方法是,在产品列表的循环过程中对喜欢该产品的用户执行请求。

ie.

foreach($prods as $row):
$likers = $this->model->get_likers($row->id);
endforeach;

这是可行的,但显然不仅会导致产品列表超慢,还会对数据库/CPU 造成很大的压力。

实施的最终解决方案是仅显示喜欢它的最新用户(这可以通过产品列表查询中的连接获得),并有一个显示有多少人喜欢的链接,点击它后,会打开一个ajax 点赞者列表。

所以我的问题是,是否真的有一种技术可以在产品列表上显示喜欢者,或者根本不可能实际执行?我注意到实际上对于大多数社交媒体网站来说,他们不会在列表中显示所有喜欢的人,并且确实采用“点击查看喜欢者”的方法。然而,他们确实在列表中显示每个项目的评论,这实际上涉及同样的问题不是吗?

编辑:模拟附加在所需的结果上。每页有 30 个产品。


通过阅读您对 Alex.Ritna 的评论回复,是的,您可以获得 x 号。每组的结果,使用GROUP_CONCAT()SUBSTRING_INDEX()它将显示用逗号或您在查询中指定的任何分隔符分隔的恋人(我使用了||)。ORDER BY子句可以在 group_concat 函数中使用。由于没有可用的模式信息,所以我假设您有一个产品表、一个用户表和一个维护用户和产品关系的联结表。在子字符串函数中,我使用了 x=3

SELECT p.*,
COUNT(*) total_likes,
SUBSTRING_INDEX(
GROUP_CONCAT( CONCAT(u.firstname,'  ',u.lastname)  ORDER BY some_column DESC SEPARATOR '||'),
'||',3) x_no_of_likers
FROM product p
LEFT JOIN junction_table jt ON(p.id=jt.product_id)
INNER JOIN users u  ON(u.id=jt.user_id)
GROUP BY p.id

Fiddle http://sqlfiddle.com/#!9/13a1f/10

现在,在您的应用程序级别,您只需循环遍历产品并拆分x_no_of_likers按分隔符显示每个产品的喜欢者

foreach($prods as $row):
$likers=explode('||',$row['x_no_of_likers']);
$total_likes= $row['total_likes'];
    foreach($likers as $user):
    ....
    endforeach;
endforeach;

请注意,默认设置了 1024 个字符限制GROUP_CONCAT()但您也可以通过以下方式增加它GROUP_CONCAT() https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat manual

根据评论编辑这是如何获取每组 n 个结果的另一种方法,从中您可以获取用户表中的所有字段,我使用了一些变量来获取产品组的排名,使用子查询junction_table为了获得排名,在外部选择中,我使用此排名过滤了记录HAVING jt.user_rank <=3所以它会给每个产品三个用户记录,我还对产品使用了子查询(SELECT * FROM product LIMIT 30 )所以前 30 组每组将有 3 个结果,因为下面的查询限制不能在最后使用,所以我在子查询中使用

SELECT p.id,p.title,u.firstname,u.lastname,u.thumbnail,jt.user_rank
FROM 
(SELECT * FROM `product` LIMIT 30 ) p
LEFT JOIN 
 (  SELECT j.*,
   @current_rank:= CASE WHEN @current_rank = product_id THEN  @user_rank:=@user_rank +1 ELSE @user_rank:=1 END  user_rank,
   @current_rank:=product_id
    FROM `junction_table` j ,
    (SELECT @user_rank:=0,@current_rank:=0) r   
    ORDER BY product_id 
  ) jt ON(jt.product_id = p.id)
  LEFT JOIN `users` u ON (jt.`user_id` = u.`id`) 
  HAVING jt.user_rank <=3 
  ORDER BY p.id

每组 Fiddle n 个结果 http://sqlfiddle.com/#!9/13a1f/8

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示喜欢项目列表中的项目的用户 的相关文章

  • 数组到字符串转换注意事项。为什么?

    为什么我得到 Applications MAMP htdocs test2 php 第 11 行中的数组到字符串转换 注意 users array aa a b bb cc c foreach users as usr var htmlsp
  • 使用 laravel 检查活动用户状态

    这是非常标准的登录功能和验证 效果很好 但我还想检查用户是否处于活动状态 我在用户表中设置了一列 并将 活动 设置为 0 或 1 public function post login input Input all rules array
  • 如何在 mysql 中两次连接同一个表?

    我有2张桌子 其中一个 域 具有域 ID 和域名 dom id dom url 另一列包含实际数据 其中 2 列需要 TO 和 FROM 域名 所以我有 2 列 rev dom from 和 rev dom for 它们都存储域表中的域名
  • \r 和 \n 在 PHP(和其他语言)中意味着什么?

    这些叫什么 r n 有解释它们的教程吗 它们分别是 回车 和 换行 通常在 Windows 上 您需要将两者一起表示行终止符 r n 而在大多数 全部 Unix 系统上 n 就足够了 See the 维基百科换行条目 http en wik
  • 如何从 php 代码更改 php 设置?

    我想更改 php 设置 但从 php 页面而不是 php ini 更改 我要更改的设置是 upload max filesize post max size and memory limit 如果您有AllowOverride 选项 您可以
  • 使用composer create-project安装特定的laravel 5版本

    今天我尝试安装特定的 laravel 版本composer create project laravel laravel 5 1 8 your project name prefer dist 因为有些插件在5 1 9及以上版本有问题 但是
  • PHP 中比较运算符“==”的混淆

    In PHP null 0 0 0 如果将这两者结合起来 您会期望 null 0 但是这是错误的 有人可以向我解释一下吗 在第一种情况下 null 0 null评估为false 与 一样0其评估结果为false 所以两者都是false所以比
  • 使用 PKCS1 生成私钥 RSA

    有没有办法在 PHP 中通过 OpenSSL 生成私钥openssl pkey 新 http php net manual en function openssl pkey new php在 RSA 和 PKCS1 中 如果您的意思是带有
  • 在 Woocommerce 商店页面中显示可变产品的默认变化价格

    I m wondering how I can display the product price on the shop page Right now my variable products are shown with their p
  • 获取MySql中重复行的列表

    我有一张这样的桌子 ID nachname vorname 1 john doe 2 john doe 3 jim doe 4 Michael Knight 我需要一个查询 该查询将从具有相同 nachname 和 vorname 的记录
  • 为什么在排序输入上插入到树中比随机输入更快?

    现在我一直听说从随机选择的数据构建二叉搜索树比有序数据更快 这仅仅是因为有序数据需要显式重新平衡以将树高度保持在最低限度 最近我实现了一个不可变的treap http en wikipedia org wiki Treap 一种特殊的二叉搜
  • 在php中将数组写入文件并获取数据

    我有一个数组 使用后如下所示print r Array 0 gt Array 0 gt piklu name gt piklu 1 gt Array 0 gt arindam name gt arindam 2 gt Array 0 gt
  • 向 tk103 GPS 跟踪器发送命令

    我正在使用 php 开发实时 GPS 跟踪器 Web 应用程序 跟踪器参考号是tk103 我可以从跟踪器接收信息并将其存储到数据库中 设备的 GPRS 模式已启用 我的问题是 如何使用 php ini 将命令从服务器发送到设备 提前致谢 这
  • 如何使用 php 创建谷歌双因素身份验证?

    我想在我的 PHP 项目中使用 Google 2FA 用户登录时需要输入6位2fa代码 您可以画出一些关于该朝哪个方向走的提示吗 步骤 1 创建长度为 16 个字符的唯一密码 PHPGangsta 为 Google Authenticato
  • 在仅包含键的字符串的嵌套数组中查找值

    我有一个数组 其中包含一些设置 基本上如下所示 defaults array variable gt value thearray gt array foo gt bar myvar gt array morevars gt moreval
  • 有没有办法从 MySQL 的列中提取与正则表达式匹配的文本?

    例如 如果特定列中的所有条目都具有 a z 0 9 形式 如何仅提取前导字母 以便 asdf123 和 as3456 分别返回 asdf 和 as 这对于 mysql 正则表达式功能来说是不可能的 除非安装一些似乎是为此设计的 udf 从技
  • 在订单项目视图中显示自定义产品数据

    我在添加到购物车时遇到问题 我有一个具有不同定制条件的产品可供选择 当客户选择特定选项时 它添加到购物车 当客户选择另一种选择并添加时 它显示为购物车中的第二件商品 这没关系 但付款后 订单在第 1 项和第 2 项下均显示自定义选项 但没有
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm

随机推荐

  • Visual Studio内存泄漏检测不打印文件名和行号

    我想检查我的程序是否存在内存泄漏并发现这篇微软文章 https msdn microsoft com en us library e5ewb1h3 28v vs 71 29 aspx 我彻底遵循了这篇文章并添加了 define CRTDBG
  • 以编程方式创建字典属性列表

    我想以编程方式创建一个字典 将数据提供给我的 UITableView 但我很难使用它 我想创建一个类似于此属性列表 图片 http 3 bp blogspot com ixq8Dp4ESMo Sc yvL3FIGI AAAAAAAAAHY
  • 如何知道使用的是哪个malloc?

    据我了解 存在许多不同的 malloc 实现 dlmalloc 通用分配器 ptmalloc2 glibc jemalloc FreeBSD 和 Firefox tcmalloc 谷歌 libumem Solaris 有什么方法可以确定我的
  • 如何增加UINavigationBar的高度?

    简单的问题 如何增加导航栏的高度 以便附加的小部件可以容纳在那里while保持模糊 例如日历应用程序 其中工作日缩写添加到导航栏的底部 并且在 邮件 中 当您将邮件移至其他文件夹时 由于 iAnurag 帖子 ans 是正确的 但仍然存在一
  • Android 如何识别来自外部适配器的 Listview 按钮单击事件?

    我有一个自定义列表视图 其中有按钮作为项目 我想为这个按钮设置监听器 目前我在适配器中使用以下代码来识别它 holder editDetails setOnClickListener new View OnClickListener Ove
  • 如何按行连接包含字符串的几列?

    我有一系列特定的数据集 其一般形式如下 import pandas as pd import random df pd DataFrame n random sample xrange 1000 3 t0 a b c t1 d e f t2
  • 为什么从管道读取时 libc++ getline 会阻塞,而 libstdc++ getline 不会?

    TL DR 一个程序使用libc 的版本getline当函数从管道读取输入时 它将阻塞 直到管道的缓冲区已满 相同的是NOT为真libstdc 的版本getline函数 这里 一旦输入行可用 该函数就会立即读取并返回一行输入 我是否应该预料
  • 有谁知道在 ANTLRWorks 中调试树语法的方法

    ANTLR 使用的推荐模式是让解析器构造一个抽象语法树 然后构建树遍历器 又称树语法 来处理它们 我试图弄清楚为什么我的树语法不起作用 并且希望使用 ANTLRWorks 的调试器 就像我将其用于解析器本身一样 解析器的输入是 源代码 但树
  • 将逗号分隔的文本文件读入数组

    我正在尝试用 C 编写一个程序 模拟大学招生系统 学生输入他们的 ID 程序在文本文件中搜索他们的信息 并根据文本文件加载结构 我已经到了无法将他们注册的课程放入结构数组的地步 使用 getline 函数 使用 作为 delim 也将继续下
  • NAT后的两个节点如何通信?

    我有一些节点 每个节点都属于其他网络 每个节点都有私有IP 例如192 168 0 2并保持在 NAT 之后 节点之间是否有可能进行通信 实际上 我需要在这些独立节点之间传输文件 我尝试使用这个项目 https github com lib
  • 如何更新FormArray的控件

    我的表单组代码如下 this myForm this fb group branch name Validators required branch timing this fb array this initBranchTiming in
  • 缩小大小时防止引导程序中列的包装/堆叠?

    我想使用 nowrap 或任何其他替代方法来防止在 col md 4 上堆叠 col md 8 就像我对 无序列表 所做的那样 下面是我的代码片段 我还提到了每个盒子的类别和颜色 谢谢
  • Spring JdbcTemplate:如何限制选定的行?

    我正在使用春天JdbcTemplate用于从 MS SqlServer DB 获取数据的接口 在文档中我看到有setMaxRows 方法来设置所有查询的限制 但是如果我只想限制一个选择怎么办 有没有办法以 可配置 的方式仅对特定调用的查询设
  • 计算 facebook 封面偏移 y

    我正在使用 Facebook SDK 获取用户封面照片 我有 img 的路径和偏移量 y source http a5 sphotos ak fbcdn net hphotos ak ash3 526114 459046674110601
  • 以编程方式将用户权限添加到 Sharepoint 中的列表

    如何以编程方式将用户权限添加到 Sharepoint 中的列表 我想为某个列表的用户或组添加 贡献 权限 我正在使用 C 您可以使用SP角色分配 http msdn microsoft com en us library microsoft
  • 将枚举值传递给角度 2 组件

    我有一个enum 并且想要从模板传递enum价值 这怎么可能 export enum FIELDS GENDER
  • 多个 y 尺度,但仅启用一个用于平移和缩放

    考虑以下用于绘制 matplotlib 图形的 python 代码 import matplotlib pylab as pp import numpy as np alpha np linspace 0 2 np pi 400 sig1
  • 使用 HTMLUnit 使用 Java 以编程方式登录 Facebook

    这个问题有点像这个问题的补充 如何使用 Java 以编程方式登录 Facebook https stackoverflow com questions 2285250 how to log into facebook programmati
  • 是否可以让 Handler 意识到它已被删除?

    我正在编写一个自定义日志配置类 它设置一个特定的处理程序并将其与根记录器关联 并计划在多个应用程序中使用它 我担心实际的程序代码会删除该处理程序并安装另一个处理程序 有没有一种方法可以让处理程序检测到它已从特定记录器中删除 或者让记录器报告
  • 显示喜欢项目列表中的项目的用户

    我认为这是一个不切实际的问题 但我想得到一些反馈来确认 我有一个产品和用户数据库 用户可以在其中喜欢产品 喜欢的数据存储在仅包含 pid 和 uid 的参考表中 客户请求是显示喜欢产品列表中每个产品的 3 位用户 问题是 不可能在产品列表的