Use variable on Sql Select
The problem is that values of the UDVs is restricted to the statement an do not passed across different SELECTs and JOINs. If you want to refer to the values calculated in the one SELECT from another SELECT you have to use values stored in the resulting table from the previous statement. Try the next form of the second operand of the CROSS JOIN:

SELECT GROUP_CONCAT(T2.label SEPARATOR ';') AS 'Domaines', X.id as id
    FROM (
        SELECT @r AS _id,
             (SELECT @r := id_parent 
              FROM ticketing_category 
              WHERE id_category = _id) AS parent_id,
              @l := @l + 1 AS lvl
        FROM ( SELECT @r := X.id , @l := 0) vars
        CROSS JOIN ticketing_category m
        WHERE @r &lt;&gt; 0
    ) T1
    JOIN ticketing_category T2
        ON T1._id = T2.id_category
) AS Y;


Here I've replaced all references to the @z by X.id that contains the values of @z calculated in the first SELECT statement. 

Just to make it clear: only the last calculated value of the @z UDV is passed across the statements and then it stay unchanged. Therefore you have the same value in the last column of the resulting table. And even now I'm not sure the result would be correct because of complexity of the whole query.