首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mysql数组中选择数据

从mysql数组中选择数据
EN

Stack Overflow用户
提问于 2019-05-07 14:58:50
回答 2查看 889关注 0票数 0

在我的MySQL数据库中,有一个名为friend_array的数组列(text类型),其中变量usernames用逗号(,)分隔

例如:单元格中的user1 friend_array值为:

代码语言:javascript
复制
prevert,
borges,
eliot,
wislawa,
derek,
hebert,
pushkin,
plath,
donnelly,
ahlberg,
ginsberg,
amiri,
rilke,
mckay,
aam,
wowen,
larkin,
michaux,
moliver,
dickinson,
rumi,
reverdy,
brecht,
tate,
cad,
cummings,
dianeb,
sexton,
redson,
pessoa,
transtromer,
shakespeare,
mistral,
sodergran,
bukowski,
auden,
tedhu,
ashton,
tomandrews,
gwallas,
updike,
ashbery,
jenkins,
rhass,
whitehead,
montale,
ritvo,
snyder,
kooser,
simic,
koertge,
nemerov,
aporter,
reichhold,
rduncan,
meretop,
kkoch,
strand,
kahf,
asha,
keats,
pinter,
santoka,
opaz,
breton,
schreiner,
bataille,
cedo,
galeano

现在如何在php中分别选择每个朋友,以便查看朋友列表而不重复

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2019-05-07 15:40:05

您应该创建一个新的表friend,如下所示:

代码语言:javascript
复制
friend
===============
id_user | username

id_user1 + username上有一个primary key,通过这种方式获得你的user1的所有朋友,你可以只做SELECT username FROM friend WHERE id_user = :id_user1;。正如评论中所说,让这种字段包含一个包含多个需要选择的值的字符串,这是非常糟糕的做法。

现在来回答这个问题,如果您设法获得了friend_array值(正如您所说的那样,包含多个用户名的字符串,用逗号分隔),您可以这样做:

代码语言:javascript
复制
$data = explode(',', $your_friend_array_string);

如果要删除重复项:

代码语言:javascript
复制
$data_unique = array_unique($data);

希望它能有所帮助,但如果可能的话,从改变你存储数据的方式开始吧!

票数 1
EN

Stack Overflow用户

发布于 2019-05-07 15:42:17

虽然我绝对同意你应该绝对努力设置op关系和使用规范化(即:创建一个朋友表)。问题是,这是否可能在不进行重复查询的情况下实现。

它是这样的:

代码语言:javascript
复制
SELECT
    a.name, 
    b.name 
FROM user a 
LEFT JOIN user b ON FIND_IN_SET(b.name, a.friends)
WHERE 
   a.name = 'name';

它并不美观,如果你有任何方法来编辑数据库结构,你应该这样做,并放弃这个“解决方案”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56017154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档