我有一个问题试图获得我想要的结果集。基本上我有这两个表:
phonemanager_defaults
| id | tag | number |
|-----|-----------------|---------------|
| 1 | MAIN | 0800 111 1111 |
| 2 | LANDLINE | 0800 222 2222 |
| 3 | CUSTOMERSERVICE | 0800 333 3333 |
phonemanager_cookie
| number_id | cookie | number |
|------------|-------------|---------------|
| 1 | twitter | 0800 444 4444 |
| 2 | twitter | 0800 555 5555 |
| 1 | facebook | 0800 666 6666 |
| 2 | facebook | 0800 777 7777 |
| 3 | facebook | 0800 888 8888 |
| 1 | ppc | 0800 999 9999 |
我正在PHP中创建一个函数,以便我传递一个cookie
作为参数,我希望返回phonemanager_defaults
与来自phonemanager_cookie
的任何相应记录的所有id
课程已加入number_id
和cookie
列,并按我指定的twitter
进行过滤。
例如,如果我将cookie
指定为Result set (twitter)
| id | tag | default_number | cookie | cookie_number |
|-----|-----------------|----------------|---------|---------------|
| 1 | MAIN | 0800 111 1111 | twitter | 0800 444 4444 |
| 2 | LANDLINE | 0800 222 2222 | twitter | 0800 555 5555 |
| 3 | CUSTOMERSERVICE | 0800 333 3333 | NULL | NULL |
,则这是我期望的结果集:
ppc
如果我将cookie
指定为Result set (ppc)
| id | tag | default_number | cookie | cookie_number |
|-----|-----------------|----------------|---------|---------------|
| 1 | MAIN | 0800 111 1111 | ppc | 0800 999 9999 |
| 2 | LANDLINE | 0800 222 2222 | NULL | NULL |
| 3 | CUSTOMERSERVICE | 0800 333 3333 | NULL | NULL |
:
LEFT JOIN
我尝试了很多不同的查询,但似乎无法做到正确。我原以为phonemanager_defaults
会有效,但它不会返回SELECT
`phonemanager_defaults`.`id` AS `id`,
`phonemanager_defaults`.`tag` AS `tag`,
`phonemanager_defaults`.`number` AS `default_number`,
`phonemanager_cookie`.`cookie` AS `cookie`,
`phonemanager_cookie`.`number` AS `cookie_number`
FROM
`phonemanager_defaults`
LEFT JOIN
`phonemanager_cookie` ON `phonemanager_defaults`.`id` = `phonemanager_cookie`.`number_id`
WHERE
`phonemanager_cookie`.`cookie` = 'twitter';
的所有记录。
这就是我现在所拥有的:
{{1}}
是否有人能够建议一个可以提供我想要的查询? SQL不是我的强项。
答案 0 :(得分:1)
要从phonemanager_defaults
获取所有结果,请将条件从连接WHERE
过滤器的ON子句移动到整个结果集上,同时在连接中使用其他条件将从{加入所需的结果{1}}和非匹配行将为您提供null
phonemanager_cookie