我有两张桌子 - Utilizadores和Competencias。
注意:Utilizadores = Users and Competencias = Skills
每个用户可以拥有一项或多项技能。
我需要在下拉菜单中打印它们,对于每种技能,它都会显示具有该技能的用户。
所以,SKILLS->具有技能的用户 (视觉已全部完成,但它无法正常工作 - 接下来解释)
这是第一个查询:
$query2 = mysql_query("SELECT DISTINCT competencias, id_user FROM ce");
$ut = array();
while ($result = mysql_fetch_array($query2)) $ut[] = $result;
foreach ($ut as $u){
$id_user=$u[1];
}
(没关系查询2上的数字2。) 此查询在表格中搜索"技能"包含该特定技能的用户的ID。同样,用户可以拥有超过1种技能。
第二次查询:
$query3 = mysql_query("SELECT `id`, `nome` FROM utilizadores WHERE id='$id_user'");
$utt = array();
while ($result2 = mysql_fetch_array($query3)) $utt[] = $result2;
foreach ($utt as $utilizador){
$nomeuser=$utilizador[1];
}
第二个查询在表格中搜索了#34;用户"用户名
最后,第三部分:
foreach ($ut as $hu){
echo "<li class='has-sub'><a><span>" .$hu[0]. "</span></a>";
echo "<ul><a href='php/curriculo.php?nomeut=$nomeuser'>". $nomeuser. "</a></ul>";
}
现在我遇到的问题是:
当鼠标悬停在下拉菜单上的技能时,它会显示一个子下拉列表,仅显示包含该技能的用户的名称。但它总是向我显示相同的名称。
在数据库中,多个技能属于多个用户,但是在子下拉列表中,它仅显示一个人的名称,而不是与他们的技能相对应的名称。
让我们说:
约翰有一项技能&#34; Sharepoint&#34;
史密斯有一项技能&#34; Whatever&#34;
当我将鼠标放在&#34; Sharepoint&#34; - &GT;约翰
当我把鼠标放在&#34; Whatever&#34; - &GT;约翰 - 当它真正对应于#34;史密斯&#34;。
我很抱歉这个很长的问题,以及我可怕的英语。
任何帮助表示赞赏 谢谢:))
答案 0 :(得分:0)
在您的第二个查询的foreach语句中,您似乎只是将$ nomeuser分配给从第二个查询中检索到的姓氏。这就是为什么你只有$ nomeuser的单一值。
要修复,我首先使用JOIN进行一次SQL调用:
SELECT DISTINCT a.competencias, a.id_user, b.nome
FROM ce a
JOIN utilizadores b ON a.id_user = b.id
然后,您可以将结果存储在关联数组中,其中关联数组的键是能力,值是包含共享该能力的所有人的名称的数组。警告:这是有问题的,因为多个用户可能共享相同的名称。在您的第三段代码中,您会看到使用用户名链接到用户配置文件(php / curriculo.php?nomeut = $ nomeuser)。使用唯一的用户ID会好得多。 $ nomeuser可能会引用唯一的用户名,在这种情况下,这不是一个问题,但在您的示例中,您提供了诸如John&#39; John&#39;和史密斯&#39;这就是我担心的原因。
但是,除此之外,假设您已将查询结果存储在关联数组中(将键作为能力和值作为唯一用户标识符),则可以循环数组并提取必要的值以输出你想要的清单。
以下是多维关联数组的示例:
$myArray = array(
"Sharepoint" => array("John", "Lisa", "Tim"),
"Excel" => array("Jim", "Nick", "Sam"),
"PowerPoint" => array("Sally", "Mary")
);
您可以在PHP文档中详细了解这些类型的数组:http://us1.php.net/manual/en/language.types.array.php
答案 1 :(得分:0)
由于我不清楚您希望从数据库中获得哪些信息,因此我将向您介绍一些选项。您可以使用PHP代码处理结果。如果您需要更多内容,请发表评论,我会更新我的回答。
假设您的表格填充如下:
users
user_id | username
1 | John
2 | Matt
3 | Rob
skills
user_id | skill
1 | PHP
1 | SQL
1 | HTML
2 | PHP
4 | HTML
使用left join
时,将返回左表的所有行。如果右表中没有匹配项,则返回NULL。此查询
SELECT u.username, s.skill
FROM users AS u
LEFT JOIN skills as s
ON u.user_id=s.user_id
将返回:
John PHP
John SQL
John HTML
Matt PHP
Rob NULL
使用right join
将返回右表中的所有行,如果左表中没有匹配则给出NULL
SELECT u.username, s.skill
FROM users AS u
RIGHT JOIN skills AS s
ON u.user_id = s.user_id
将返回:
John PHP
John SQL
John HTML
Matt PHP
NULL HTML
使用inner join
,将返回两个表中匹配的所有行。所以这个查询
SELECT u.username, s.skill
FROM users AS u
RIGHT JOIN skills AS s
ON u.user_id = s.user_id
将返回
John PHP
John SQL
John HTML
Matt PHP