我有4张桌子:

项目

+----+------+---------+-----+

| id | name | city_id | ... |

+----+------+---------+-----+

属性

+----+------+-----+

| id | name | ... |

+----+------+-----+

item_attribute

+----+---------+--------------+

| id | item_id | attribute_id |

+----+---------+--------------+

+----+------+-----+

| id | name | ... |

+----+------+-----+

项目和属性具有多对多关系.

物品仅位于一对多的城市中

题:

我正在使用php(Laravel).如何在一个城市中为一个具有相似属性的项目获取项目列表(带LIMIT)?属性列表永远不等于2个项目.

是否可以使用MySQL查询?

例:

| ItemName | Attributes | City |

+----------+-----------------------+------+

| Alpha | one, two, three, four | NY |

| Beta | five, six, seven | NY |

| Gamma | one, three, seven | NY |

| Delta | one, six, eight | CA |

| Epsilon | two, three, four | NY |

| Zeta | ten, nine | NY |

我想为Alpha选择类似的项目,它们将是:Gamma,Epsilon,因为它们具有相似的属性.

Delta将不会被选中,因为它位于另一个城市.

最佳答案 如果你同时传入了item_id和city_id:

SELECT i.name,

GROUP_CONCAT(a.name) attributes,

c.name

FROM items i

JOIN city c

ON c.id = i.city_id

JOIN item_attribute ia

ON ia.item_id = i.id

AND EXISTS (

SELECT 1

FROM item_attribute ia1

JOIN item_attribute ia2

ON ia2.attribute_id = ia1.attribute_id

AND ia2.item_id = ia.item_id

WHERE ia1.item_id = :item_id /* Pass in item id variable */

)

JOIN attributes a

ON a.id = ia.attribute_id

WHERE i.city_id = :city_id /* Pass in city id variable */

GROUP BY i.name, c.name

如果你只是想传递示例项id :(有点草率,但应该工作)

SELECT i.name,

GROUP_CONCAT(a.name) attributes,

c.name

FROM items base

JOIN items i

ON i.city_id = base.city_id

JOIN city c

ON c.id = i.city_id

JOIN item_attribute ia

ON ia.item_id = i.id

AND EXISTS (

SELECT 1

FROM item_attribute ia1

JOIN item_attribute ia2

ON ia2.attribute_id = ia1.attribute_id

AND ia2.item_id = ia.item_id

WHERE ia1.item_id = base.id

)

JOIN attributes a

ON a.id = ia.attribute_id

WHERE base.id = :item_id /* Pass in item id variable */

GROUP BY i.name, c.name

**更新**

排序:

...

JOIN (

SELECT ia2.item_id, COUNT(*) count

FROM item_attribute ia1

JOIN item_attribute ia2

ON ia2.attribute_id = ia1.attribute_id

AND ia2.item_id = ia1.item_id

/* AND ia2.id != ia1.id /* If you don't want the original item */

WHERE ia1.item_id = base.id

GROUP BY ia2.item_id

) similar

ON similar.id = ia.item_id

...

ORDER BY similar.count DESC

php项目列表,php – 如何获取类似项目的列表相关推荐

  1. IDEA 提交项目至Git与获取Git项目

    1.IDEA提交项目至git 注:保证已安装Git分布式管理系统,没有自行百度安装git 1)在IDEA中配置Git与GitHub a)Git: File-->Settings --> V ...

  2. 云对象获取服务器的文件列表,云对象获取服务器的文件列表

    云对象获取服务器的文件列表 内容精选 换一换 通过应用与华为OBS(Object-based Storage Service)对接,实现对象或者Widget资产存储功能.对象存储服务(Object-b ...

  3. 带评分的Jupyter资源列表:270个开源项目,总计24w星,帮你快速找代码

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 如何从Jupyter的N多功能中,快速get到自己想要的内容? 这份超级清单--「Best-of Jupyter」,帮你整理了270多个精选 ...

  4. 在Python中给定包含该项目的列表的情况下查找项目的索引

    对于列表["foo", "bar", "baz"]和列表"bar" ,如何在Python中获取其索引(1)? #1楼 a ...

  5. python自动读取excel文件邮箱列表,自动批量发送邮件项目(附使用方法+代码)

    python自动发送邮件项目 项目简介 使用方法 项目结构 完整项目代码 结语 项目简介 该项目功能是利用python自动读取excel文件中的邮箱列表,并批量发送邮件到目标邮箱,进行客户挖掘的.该项 ...

  6. React项目实战之租房app项目(四)长列表性能优化城市选择模块渲染列表

    前言 目录 前言 一.长列表性能优化 1.1 概述 1.2 懒渲染 1.3 可视区渲染(React-virtualized) 二.react-virtualized组件 2.1 概述 2.2 基本使用 ...

  7. 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )

    文章目录 I . 创建 NDK 项目 II . NDK 项目 相关配置 III . NDK 中获取 Android 版本号 IV . 使用 __system_property_get 可获取的参数 I ...

  8. Spring MVC中获取当前项目的路径

    Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...

  9. python获取工程根目录_【Python】获取当前项目根路径/目录

    """ -*- coding:utf-8 -*- @Time :2020/9/23 18:16 @Author :Jarvis @File :jar_project_ut ...

最新文章

  1. 关于Mysql5.6半同步主从复制的开启方法【转】
  2. Python爬虫之旅_(数据解析)_Xpath
  3. 为什么linux远程一进入sudo su就卡住_Linux 实战(上)
  4. DeFi衍生品协议dFuture未来5日将通过公测奖励100万枚DFT
  5. linux内核寻址,深入理解Linux内核-内存寻址
  6. 算法:同构字符串205. Isomorphic Strings
  7. UVA 10602 - Editor Nottoobad
  8. 汉澳sinox2013支持的PCI/USB无线网卡,购买必看
  9. ceph的数据存储之路(7) -----PG 的状态机和peering过程
  10. 逻辑谬误_跟上的谬误
  11. CSAPP-Lab03 Attack Lab 详细解析
  12. 可以边玩游戏边学编程的手游盘点
  13. 什么是南向接口和北向接口,南北流量和东西流量
  14. 金蝶二次开发的常见类型
  15. php微信短网址生成,如何把微信文章网址长连接(长网址)转换为短连接(短网址)...
  16. 7.2 IDEA 没有Java EE
  17. 限电模块的在学生宿舍管理中的功能要求
  18. 记 随手科技2020届实习生笔试题(Java开发工程师)笔试题
  19. iOS完整学习路线图
  20. Docker 学习实战路线

热门文章

  1. 使用 NodeJS + Express 從 GET/POST Request 取值 -摘自网络
  2. webservice(基础)
  3. jQuery $.post $.ajax用法
  4. Google Gears 指南
  5. 协同过滤的itemCF,userCF区别适用场景
  6. 单核工作法18:简化协作(下)
  7. 云炬随笔20211126(2)
  8. [我的1024开源程序]60元写的宠物网页和音乐网页
  9. 收藏!AI 最全干货超级大列表,100+ 张速查表全了!
  10. 海南师范大学计算机设计大赛证书,我校品牌VI设计作品在中国大学生计算机设计大赛海南省赛中获得一等奖...