查询与另一个表相关的信息

时间:2014-05-06 13:34:22

标签: php mysql

我有两张桌子 - 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;。

我很抱歉这个很长的问题,以及我可怕的英语。

任何帮助表示赞赏 谢谢:))

2 个答案:

答案 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