2011-12-22 54 views
0

的結果,我有這樣的問題:的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.P.S .:對不起英語不好,我是意大利語:S

回答

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; 
+0

謝謝,這就是我正在尋找的! – AleVale94 2011-12-22 18:23:13

+0

不好意思,我該如何設置一個參數,以便這個過程可調用並返回一個id列表?非常感謝您的幫助。 – AleVale94 2011-12-22 18:48:09

+0

如果你的意思是可調用的MySQL程序,我認爲這不會讓事情變得簡單。你的意思是從PHP可以調用嗎? – Andrew 2011-12-22 19:31:00