sql >> Databasteknik >  >> RDS >> Mysql

MySQL Stored Procedure Design Problem. Rekussion eller hierarki?

Ett bra ställe att börja skulle vara:

SELECT 
    A.num_1, B.num_2 
FROM 
    Smaller AS A JOIN Smaller AS B ON (A.num_1 < B.num_2) 
ORDER BY A.num_1, B.num_2;

Inuti din lagrade procedur, placera detta i en markör, iterera över markören och gör en INSERT IGNORE för varje rad. Dvs:

DECLARE num1,num2 INT;
DECLARE done DEFAULT 0;
DECLARE mycursor CURSOR FOR SELECT # use the select above, im lazy here
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN mycursor;

my_loop: LOOP
    FETCH mycursor INTO num1, num2;
    IF done THEN
       LEAVE my_loop;
    END IF;
    INSERT IGNORE INTO Smaller VALUES (num1,num2);
END LOOP;

För att svara på din uppdaterade fråga är jag inte helt säker på om du menar ansluten som genom relationer mellan unika rader (du skulle behöva två kolumner för att lagra denna relation, så det skulle vara ganska lika). Eller om du menar att du har en tabell som innehåller alla siffror och en annan tabell med två kolumner som innehåller relationer mellan raderna i den första tabellen.

Eller, slutligen, om du vill ha en tabell som bara innehåller strängar med "1-2", "1-3" etc. Om så är fallet skulle jag behålla den som två individuella kolumner och bara mata ut dem som strängar med CONCAT när du pollar bordet :)




  1. MySQL-frågesortering med siffror

  2. Hur söker jag efter namn som börjar på A i MySQL?

  3. php infoga flera värden i separata rader i mysql-tabellen

  4. Anslut till MySQL i MAMP