开发一个PHP / MySQL网站,用户可以在其中搜索其他用户。我们想要创建一个可以显示“自动”配置文件匹配的区域。这意味着它将当前登录用户的个人资料与网站上的其他用户进行比较,并显示在个人资料中标记了相同选项的用户。
该网站建立在WordPress上,因此它使用user_meta表来存储用户的所有数据。
用户
+----+-----------------+----------+
| id | user_login | etc |
+----+-----------------+----------+
| 1 | username1 | ... |
| 2 | username2 | ... |
| 3 | username3 | ... |
+----+-----------------+----------+
用户元
+----+-------------+-------------+-------------+
| id | user_id | meta_key | meta_value |
+----+-------------+-------------+-------------+
| 1 | 1 | zipcode | 92027 |
| 2 | 1 | smoker | Y |
| 3 | 1 | something | xyz |
+----+-------------+-------------+-------------+
我没有开始任何查询,因为从概念上讲,我仍然不知道如何处理这个问题。
理想情况下,结果将按大多数匹配顺序排序。
答案 0 :(得分:0)
仅限概念?
可能是一种查询广泛的方法:
if (is_user_logged_in == TRUE) {
1. Get all metas this profile have using GROUP query put them in an array( meta1 => 'element1', meta2 => 'element2')
2. Foreach values in the array Run search SELECT * FROM wp_table WHERE meta1='element1
' 3. Count the results of 2, if greater than zero echo the other profiles
}
答案 1 :(得分:0)
所以我最终做了什么:
拉出当前登录用户的所有元数据。然后循环通过所有其他用户。对于其他每个用户,我抓住了所有的元数据。我将当前用户的元值分别与每个用户进行了比较。如果每个其他用户具有匹配的元值,则给予+1。我创建了一个包含用户ID的新数组以及它们有多少匹配。按匹配数对该数组进行排序。我使用WordPress的瞬态系统实质上将这些数据缓存24小时,因此这个过程不会通过分页或用户进出这一页来反复运行。如果当前用户更新了他们的个人资料,我也会清除瞬态。