在我的MySQL数据库中,我有一个名为friend_array
的数组列(文本类型),其中的变量usernames
用逗号(,)分隔
例如:单元格中的user1
friend_array
值为:
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中分别选择每个朋友,以便查看朋友列表而不重复
提前致谢
您应该创建一个如下所示的新表friend
:
friend
===============
id_user | username
有了id_user1 + username
primary key
,这种方式可以让你user1
的所有朋友都做SELECT username FROM friend WHERE id_user = :id_user1;
。如注释中所述,将这种字段与包含多个值的字符串一起使用是非常糟糕的做法。
现在回答这个问题,如果您设法获取friend_array
值(如您所说,具有多个用户名的字符串,以逗号分隔),您可以执行以下操作:
$data = explode(',', $your_friend_array_string);
如果要删除重复项:
$data_unique = array_unique($data);
希望它有所帮助,但如果可能的话,首先改变您存储数据的方式!
虽然我绝对同意你应该努力设置操作关系并使用规范化(即:创建一个朋友表)。问题是这是否可以在不进行重复查询的情况下进行。
它是这样的:
SELECT
a.name,
b.name
FROM user a
LEFT JOIN user b ON FIND_IN_SET(b.name, a.friends)
WHERE
a.name = 'name';
它并不漂亮,如果您有任何方法可以编辑数据库结构,您应该这样做并放弃这个"解决方案"。