84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
额,大家好,首先感谢大家抽出时间看我的问题,可能描述不是很详细我来举个例子吧,比如会员设置了自己的爱好,爱好是复选框,值分别是1,2,3···分别代表足球、篮球等等PHP接收到的是数组,序列化之后再存到数据库,那用户在前台搜索同样爱好的会员,比如足球,怎么把数据表中有相同爱好的小伙伴查询出来呢?我当时面对这个需求的时候,就两个选项,所以查询A爱好的时候,把A的值序列化,然后用like去查询,但总感觉这样做不太妥当,两个还好弄,如果N多个呢
学习是最好的投资!
有查詢需求你就不適合把這個東西用序列化的形式存儲起來,另外建一個關聯表,用你的例子來說的話是個愛好表,需要至少包括用戶ID和愛好兩個字段,搜索的時候去這個表來進行搜索,然後對用戶ID進行去重得到你要的結果,再拿著這個結果去用戶表進行select...in查詢
你這樣設計已經有問題了。這個對應關係要三張表。 第一張用户表(uid),uid作為關聯字段第二張兴趣表(hobby),hobby_id作為關聯字段第三張用户兴趣表(uid_hobby) 兩個字段uid,hobby_id 就可以關聯起來了。某個使用者有哪幾個嗜好OK,你的需求是用户在前台搜索同样爱好的会员足球的ID是1所以如下語句。 select uid from uid_hobby where hobby_id = 1 即可查詢出所有喜歡足球的會員(包括自己)最後再建議like 除了滿足左前綴之外,其他都不會走索引,全表掃描+匹配,效率極低。
用户表(uid)
uid
兴趣表(hobby)
hobby_id
用户兴趣表(uid_hobby)
用户在前台搜索同样爱好的会员
select uid from uid_hobby where hobby_id = 1
like
mysql find_in_set
find_in_set
有查詢需求你就不適合把這個東西用序列化的形式存儲起來,另外建一個關聯表,用你的例子來說的話是個愛好表,需要至少包括用戶ID和愛好兩個字段,搜索的時候去這個表來進行搜索,然後對用戶ID進行去重得到你要的結果,再拿著這個結果去用戶表進行select...in查詢
你這樣設計已經有問題了。這個對應關係要三張表。
第一張
用户表(uid)
,uid
作為關聯字段第二張
兴趣表(hobby)
,hobby_id
作為關聯字段第三張
用户兴趣表(uid_hobby)
兩個字段uid,hobby_id 就可以關聯起來了。某個使用者有哪幾個嗜好OK,你的需求是
用户在前台搜索同样爱好的会员
足球的ID是1
所以如下語句。
select uid from uid_hobby where hobby_id = 1
即可查詢出所有喜歡足球的會員(包括自己)最後再建議
like
除了滿足左前綴之外,其他都不會走索引,全表掃描+匹配,效率極低。mysql
find_in_set