我有这个问题:
如果N个用户订阅了一个网站,如果访问该页面的用户被记录,则根据X和Y之间的共同朋友显示建议列表。
我问我的信息技术教授如何解决它,但他只知道SQL,我需要MySQL代码(我使用PhpMyAdmin)。
如何将此SQL代码转换为MySQL代码?
“QUALIAMICI”代码(它告诉我X的朋友是什么(Y是id列表))
CREATE PROCEDURE QUALIAMICI ( X integer ) RETURNS ( Y integer ) AS
BEGIN SUSPEND; END^
ALTER PROCEDURE QUALIAMICI ( X integer ) RETURNS ( Y integer ) AS
begin
for
select idDestinatario from amicizie where idmittente=:x
union
select idMittente from amicizie where iddestinatario=:x
into :y
do suspend;
end^
“AMICI_COMUNI”代码(它告诉我X和Y之间的共同朋友)
CREATE PROCEDURE AMICI_COMUNI ( X integer, Y integer ) AS
BEGIN SUSPEND; END^
ALTER PROCEDURE AMICI_COMUNI ( X integer, Y integer ) AS
begin
insert into Uno (id_amico) select * from QUALIAMICI(:x);
insert into Due (id_amico) select * from QUALIAMICI(:y);
insert into Tre (id_amico) select * from Uno where id_amico in (select id_amico from due);
end^
如何将其转换为MySQL?我对MySQL知之甚少,所以我想你解释了什么建议。
P.S。:即使我没有将变量翻译成英文,你能理解算法吗? P.P.S:我很抱歉英语不好,我是意大利人:S
答案 0 :(得分:2)
你正在制作一张X的朋友表和一张Y的朋友表,然后获取两张表中的ID列表。以下是使用子查询在单个语句中使用MySQL的方法。
SET @x = 123; -- id for user X
SET @y = 456; -- id for user Y
CREATE TEMPORARY TABLE friendsInCommon (id int);
INSERT INTO friendsInCommon (id)
SELECT id
FROM
(SELECT idDestinatario AS id
FROM amicizie
WHERE idMittente = @x
UNION
SELECT idMittente
FROM amicizie
WHERE idDestinatario = @x) AS XAmicizie
WHERE id IN
(SELECT idDestinatario AS id
FROM amicizie
WHERE idMittente = @y
UNION
SELECT idMittente
FROM amicizie
WHERE idDestinatario = @y);
SELECT id FROM friendsInCommon;