Mysql
 sql >> база данни >  >> RDS >> Mysql

ИЗБЕРЕТЕ и избройте деца и родител

Опитайте тази цигулка http://sqlfiddle.com/#!2/0a9c5/16 , sql код по-долу

SELECT c.rule_id, c.rule_title, GROUP_CONCAT(r.rule_title)
FROM RULES_TABLE AS c
LEFT JOIN RULES_TABLE AS r
    ON r.parent_id = c.rule_id
WHERE c.parent_id IS NULL AND c.public = 1
GROUP BY c.rule_id
ORDER BY c.cat_position, c.rule_position;

пропусна php-изацията на кода нарочно, за да поддържа подчертаването на синтаксиса, което изглежда така или иначе не работи

Ако надвишите максимално разрешения group_concat размер, можете или да го увеличите, или да използвате следната версия и да направите малко повече обработка в php:

SELECT c.rule_id, c.rule_title, r.rule_title as r_rule_title
FROM RULES_TABLE AS c
LEFT JOIN RULES_TABLE AS r
    ON r.parent_id = c.rule_id
WHERE c.parent_id IS NULL AND c.public = 1
ORDER BY c.cat_position, c.rule_position;

и в php, предоставен само скелетен код, попълнете с действителните стойности, като приемем, че използвате pdo и вашият pdostatement var се казва $query :

$old_rule_id = null;
$rrt = array(); // will contain all r.rule_titles for a give c.rule_id
while( ($i = $query->fetch(PDO::FETCH_OBJ)) !== false ) {
    if( $old_rule_id != $i->rule_id ) {
        if( count($rrt) ) {
            echo ... all the data for previous rule from $rrt ...
            echo ... end of previous element ...
            $rrt = array(); // empty it to collect new data
        }
        echo ... start of current element use data from $i->rule_id and $i->rule_title ...
        $old_rule_id = $rule_id;
    }
    $rrt[] = $i->r_rule_title;
}
// the following is the same if from inside the while, minus reinitialization of $rrt;
if( count($rrt) ) {
    echo ... all the data for previous rule from $rrt ...
    echo ... end of previous element ...
}

заменете нещата между ... с валиден код



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как показват, че многоизмерните масиви се вмъкват в MySQL таблица?

  2. Кога избрахме DateTime пред Timestamp

  3. Как да получите броя на всяка отделна стойност в колона?

  4. MySQL задава текуща дата в поле DATETIME при вмъкване

  5. Заключване на ниво ред в Mysql