MySQL - 将查询结果分配给变量

时间:2011-12-22 15:14:40

标签: mysql

我有这个问题:

  

如果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

1 个答案:

答案 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;