Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Its possible using a combination of <code>stored procedures</code>, <code>in-memory tables</code> and control flow using a <code>WHILE</code> loop:</p> <pre><code>DELIMITER $$ DROP PROCEDURE IF EXISTS `Get10ProjectsPerUserByStatus`$$ -- 1. DEFINE STORED PROCEDURE CREATE PROCEDURE `Get10ProjectsPerUserByStatus`(_status INT) BEGIN -- 2. DECLARE VARIABLES AND IN-MEMORY TABLES DECLARE _id INT; DROP TABLE IF EXISTS temp_user; DROP TABLE IF EXISTS temp_project_user; CREATE TABLE temp_user (id INT) ENGINE=MEMORY; CREATE TABLE temp_project_user (p_id INT, u_id INT) ENGINE=MEMORY; -- 3. ADD ALL USERS AND LOOP BY REMOVING 1 USER AT A TIME INSERT INTO temp_user SELECT id FROM users; WHILE (SELECT COUNT(*) FROM temp_user) &gt; 0 DO SET _id = (SELECT MIN(id) FROM temp_user); INSERT INTO temp_project_user SELECT ps.project_id, _id FROM project_skills ps JOIN expert_skills es ON ps.skill_id = es.skill_id WHERE es.expert_id = _id LIMIT 10; DELETE FROM temp_user WHERE id = _id; END WHILE; -- 4. SELECT FROM IN-MEMORY TABLE AND JOIN TO EXISTING SCHEMA SELECT DISTINCT t.u_id AS expert_id, u.firstname, u.lastname, t.p_id AS project_id, p.project_title, p.project_budget, p.created AS project_created FROM temp_project_user t INNER JOIN users u ON u.id = t.u_id INNER JOIN projects p ON p.id = t.p_id; -- 5. DROP IN-MEMORY TABLES DROP TABLE temp_user; DROP TABLE temp_project_user; END$$ DELIMITER ; -- 6. CALL STORED PROCEDURE &amp; DROP WHEN FINISHED CALL Get10ProjectsPerUserByStatus(1); DROP PROCEDURE IF EXISTS `Get10ProjectsPerUserByStatus`; </code></pre> <p><strong>NOTE:</strong> Going beyond the question here but it is actually possible to apply the 10 project limit as a parameter of the stored procedure by using the same logic:</p> <pre><code>-- GET 10 PROJECTS PER USER WITH STATUS = 1 CALL GetProjectsPerUserByStatus(1, 10) </code></pre> <p>To do this you'd need 1 additional <code>in-memory table</code> and another <code>WHILE</code> loop</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload