从mysql数组中选择数据

时间:2019-05-07 06:58:50

标签: php mysql

在我的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中分别选择每个朋友,以便不重复查看朋友列表

预先感谢

2 个答案:

答案 0 :(得分:1)

您应该创建一个新表friend,例如:

friend
===============
id_user | username

primary key上有id_user1 + username,这样就可以结识user1的所有朋友,您只需做SELECT username FROM friend WHERE id_user = :id_user1;。如注释中所述,使用带有包含多个值的字符串的字段来进行选择确实是一种糟糕的做法。

现在要回答这个问题,如果您设法获取friend_array值(如您所说的具有多个用户名且用逗号分隔的字符串),则可以执行以下操作:

$data = explode(',', $your_friend_array_string);

如果您要删除重复项:

$data_unique = array_unique($data);

希望它会有所帮助,但如果可能的话,首先要更改存储数据的方式!

答案 1 :(得分:0)

虽然我完全同意,但您应该绝对致力于设置操作关系并使用规范化(即:创建一个Friends表)。问题是,在不进行重复查询的情况下是否可行?

是这样的:

SELECT
    a.name, 
    b.name 
FROM user a 
LEFT JOIN user b ON FIND_IN_SET(b.name, a.friends)
WHERE 
   a.name = 'name';

这不是很漂亮,如果您有任何方法可以编辑数据库结构,则应该这样做并放弃此“解决方案”。