2016-08-03 57 views
0

我如何按照技能对此进行分组,然后按照每种技能回显所有照片。PHP分组和LOOPS

SELECT skills.teacher, skills.student, skills.skill, profile.photo 
FROM skills 
INNER JOIN profile ON skills.student = profile.username 
WHERE teacher = 'teach1' 

teacher | student | skill | photo 
------- | -------- | ------ | ------------ 
teach1 | student1 | skill1 | student1.jpg 
teach1 | student2 | skill1 | student2.jpg 
teach1 | student3 | skill2 | student3.jpg 
teach1 | student3 | skill1 | student3.jpg 
teach1 | student4 | skill3 | student4.jpg 
teach1 | student1 | skill2 | student1.jpg 

我强调这是一个例子。我实际上并不知道学生创建的“技能”的名称。我不知道会列出多少技能。我不知道用户会向什么教师添加什么技能。

我尝试while循环和foreach循环。我只是无法弄清楚如何分组这个和使用什么类型的循环...

我需要我的最终结果,让我回声。

<div>skill1 
<img src="student1.jpg"> 
<img src="student2.jpg"> 
<img src="student3.jpg"> 
... 
... 
... 
</div> 

<div>skill2 
<img src="student1.jpg"> 
<img src="student3.jpg"> 
... 
... 
... 
</div> 

<div>skill3 
<img src="student4.jpg"> 
... 
... 
... 
</div> 

回答

1

首先,为了通过技能,这样你才能让他们:

SELECT skills.teacher, skills.student, skills.skill, profile.photo 
FROM skills 
INNER JOIN profile ON skills.student = profile.username 
WHERE teacher = 'teach1' 
ORDER BY skills.skill 

分配一个变量(在这种情况下$lastSkill)while循环之外。检查它是否已更改,并相应地输出内容。看看下面的例子。你的PHP代码看起来类似这样:

$lastSkill = null; 

while ($row = fetchrow()) 
{ 
    if ($row['skill'] !== $lastSkill) 
    { 
     //Don't close a div, if it's the first row 
     if ($lastSkill !== null) 
      echo '</div>'; 

     //We've moved onto a new row, echo it out 
     echo '<div>' . $row['skill']; 
     //Store the lastSkill 
     $lastSkill = $row['skill']; 
    } 

    echo '<img src="' . $row['photo'] . '">'; 
} 
+0

花了一分钟,以实现fetchrow是 - >取(PDO :: FETCH_ASSOC),但我得到了它。 :)非常感谢你 – Bruce

+0

@Bruce你从未发布过你的数据库连接/获取代码,所以我不得不在那里猜测一些[伪代码](https://en.wikipedia.org/wiki/Pseudocode)。 – FrankerZ

-1
SELECT skills.teacher, skills.student, skills.skill, profile.photo 
FROM skills 
INNER JOIN profile ON skills.student = profile.username 
WHERE teacher = 'teach1' Group by skills.skill order by skills.? 

**ORDER BY WHATEVER YOU WANT PUT IN PLACE OF ?.** 
+0

这是如何让他达到他的最终结果? – FrankerZ

+0

你会得到所需的结果。 SELECT skills.teacher,skills.student,skills.skill,profile.photo FROM skills INNER JOIN profile on skills.student = profile.username WHERE teacher ='teach1'Group by skills.skill在我的sql中运行此查询会得到。 – piyushiiitm