日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php项目列表,php – 如何获取类似项目的列表

發布時間:2025/3/15 php 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php项目列表,php – 如何获取类似项目的列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我有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 – 如何获取类似项目的列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。