比较并显示两个表中的不同数据

时间:2016-04-08 19:20:29

标签: php sql join mysqli

我有两张桌子。技能,包含所有可用的技能。 和user_skills,包含用户获得的技能。 我需要输出所有可用的技能,并且用户具有的技能(我通过session['username']选择)将被标记(选中复选框)。

$get_all_skills = mysqli_query($conn, "SELECT * FROM skills");
$web_design = array();
$web_develop = array();
$automation = array();
$security = array();
while($show_row = mysqli_fetch_array($get_all_skills)){
    switch($show_row['skill_type']){
        case '1':
            array_push($web_design, $show_row['skill_name']);
            break;
        case '4':
            array_push($web_develop, $show_row['skill_name']);
            break;
        case '3':
            array_push($automation, $show_row['skill_name']);
            break;
        case '2':
            array_push($security, $show_row['skill_name']);
            break;
    }
}

我怎么可能做这个工作? 部分HTML是:

<div class="">
                                <ul class="to_do">
                                  <?php
                                  for($i=0;$i<count($web_develop);$i++){

                                  ?>
                                  <li>
                                    <p>
                                      <input type="checkbox" class="flat"> <?php echo $web_develop[$i];?> </p>
                                  </li>
                                  <?php } ?>
                                </ul>
                              </div>

2 个答案:

答案 0 :(得分:0)

考虑到你声明了user_skills数组($ user_skills_array)并拥有数据,请使用下面的html代码

localhost:9000

答案 1 :(得分:0)

尝试下面的解释。

 <?php
$get_all_skills = mysqli_query($conn, "SELECT * FROM skills");

$availableSkills = [];
$skillTypes = [
    1 => 'Webdesign',
    2 => 'Security',
    3 => 'Automation',
    4 => 'Web Development',
];

while($show_row = mysqli_fetch_array($get_all_skills)){
    $skill = [
        'id' => $show_row['id'];
        'name' => $show_row['name'];
    ];
    $skillType = $show_row['skill_type'];

    $availableSkills[$skillType][] = $skill;
}

// assuming user_skills:
$userSkills = [
    1,
    2,
    5,
    8
];

?>

    <ul class="to_do">
      <?php foreach ($availableSkills as $type => $skillsForType) : ?>
        <li>
            <?= $skillTypes[$type] ?>
            <ul>
                <?php foreach ($skillsForType as $skill) : ?>
                    <li>
                        <input 
                            type="checkbox" 
                            class="flat" 
                            name="skill[<?= $type ?>]" 
                            value="<?= $skill['id'] ?>"
                            <?= in_array($skill['id'], $userSkills) ? 'checked="checked"' : '' 
                        > <?= $skill['name'] ?>
                    </li>
                <?php endforeach; ?>
            </ul>
        </li>   
      <?php endforeach; ?>
    </ul>

首先,你已经完成所有技能的收集。 接下来,我将您的不同技能数组优化为一个,并列出所有技能类型。

可用技能按其类型ID编制索引(请参阅$ skillsTypes)。

接下来,我假设您的用户技能收集可能如下所示。

在HTML部分中,我正在迭代每种技能类型,并在嵌套的foreach中回显所有相应的技能。 如果当前迭代的技能id是user-skill-relation的in_array,则设置“checked”属性。

为了澄清我在这个例子中使用了短语法。

[] --> array()
<?= --> <?php echo

foreach () : endforeach;