我在 HTML / PHP 中为我的网站上的某个人整理了一个链接列表。它允许多个选择(选择属性"多个")它基本上是这样的:
╔══════════╗
║ Facebook ║
╠══════════╣
║ Google+ ║
╠══════════╣
║ Twitter ║
╚══════════╝
所选项目将保存到MySQL数据库中,但并非全部。保存选择后,我想回去看看,选择了哪些选项。这意味着我必须使用我选择的选项在PHP中生成 select 元素。
最后一次编辑于2015年4月6日13:23(芬兰时间)
在 MySQL 中,我有以下表格:
表格如下所示(试图显示与此问题相关的列;数据是任意的,此处是为了演示):
链接
╔══════════╦════════════╗
║ id ║ name ║
╠══════════╬════════════╣
║ 1 ║ Facebook ║
╠══════════╬════════════╣
║ 2 ║ Google+ ║
╠══════════╬════════════╣
║ 3 ║ Twitter ║
╚══════════╩════════════╝
人
╔══════════╦═════════════╦═════════════╦══════════════╦═════════════════╗
║ id ║ name_first ║ name_last ║ address ║ email ║
╠══════════╬═════════════╬═════════════╬══════════════╬═════════════════╣
║ 1 ║ Jack ║ Johnson ║ Wacko Street ║ NULL ║
╠══════════╬═════════════╬═════════════╬══════════════╬═════════════════╣
║ 2 ║ Hanna ║ Hill ║ Hill Town ║ hh@gmail.com ║
╠══════════╬═════════════╬═════════════╬══════════════╬═════════════════╣
║ 3 ║ Eric ║ Samson ║ Wacko Street ║ NULL ║
╚══════════╩═════════════╩═════════════╩══════════════╩═════════════════╝
person_link
╔═══════════╦═════════╦═════════════════════╗
║ id_person ║ id_link ║ address ║
╠═══════════╬═════════╬═════════════════════╣
║ 2 ║ 1 ║ www.example.com ║
╠═══════════╬═════════╬═════════════════════╣
║ 2 ║ 2 ║ www.hello.org ║
╚═══════════╩═════════╩═════════════════════╝
简而言之,我的问题是我无法在MySQL中组合正确的查询来实现预期目标。我在两张桌子之间看到了很多关于LEFT JOIN的问题,但没有遇到一个问题,另外一张桌子将两张桌子连在一起。
我尝试了以下内容:
SELECT link.name, person.id
FROM link
LEFT JOIN person_link ON (link.id = person_link.id_link)
JOIN person ON (person_link.id_person = person.id)
WHERE person.id = 2
现在,我希望这种查询能够列出左边的所有链接,并在右侧并置特定人物的ID(如果可用)。如果ID与链接匹配,则已从选择 -element中选择此链接。这就是我想要的结果(NULL代表缺少匹配):
╔══════════╦══════╗
║ Facebook ║ 2 ║
╠══════════╬══════╣
║ Google+ ║ 2 ║
╠══════════╬══════╣
║ Twitter ║ NULL ║
╚══════════╩══════╝
为什么我希望表格看起来像这样?因为基于这个表我可以生成select-element看起来像这样:
╔═════════════════════╗
║ Facebook (SELECTED) ║
╠═════════════════════╣
║ Google+ (SELECTED) ║
╠═════════════════════╣
║ Twitter ║
╚═════════════════════╝
但是,不是查询成功,我最终得到了这个:
╔══════════╦══════╗
║ Facebook ║ 2 ║
╠══════════╬══════╣
║ Google+ ║ 2 ║
╚══════════╩══════╝
我的查询显然有问题,但我不知道它是什么。所以,我的问题是,如何使用(LEFT)JOIN通过一个表连接两个表?
答案 0 :(得分:1)
您需要允许此人为NULL:
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmCode")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmId")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "userId")
您也可以将其写为:
SELECT link.name, person.id
FROM link
LEFT JOIN person_link ON (link.id = person_link.id_link)
LEFT JOIN person ON (person_link.id_person = person.id)
WHERE (person.id = 2 OR person.id IS NULL)
答案 1 :(得分:1)
SELECT l.name, p.id
FROM link l
LEFT JOIN person_link pl
ON (l.id = pl.id_link)
LEFT JOIN person p
ON (pl.id_person = p.id && l.id = pl.id_link && p.id = 2)
group by l.link
或基于Nirala的回答
SELECT l.name, pl.id_person
FROM link l
LEFT JOIN person_link pl
ON (l.id = pl.id_link && pl.id_person = 2)
group by l.link
答案 2 :(得分:0)
我建议你
SELECT link.name, person_link.id_person FROM link LEFT JOIN person_link
ON link.id = person_link.id_link WHERE person_link.id_person = 2
答案 3 :(得分:0)
一些示例数据会很好(http://sqlfiddle.com/会很完美),但从我的角度来看,这个未经测试的查询应该可以胜任。
SELECT person.*, link.*
FROM person_link
RIGHT JOIN link ON id_link = link.id
INNER JOIN person ON id_person = person.id
WHERE id_person = 2