获取行数据作为列名并设置为布尔值(如果存在或不存在)
Fetching row data as column names and set as boolean if exists or not
我可以访问与此类似的数据库:
用户:
id | name
====|========
1 | Tom
2 | Dick
3 | Harry
4 | Sally
排除:
user_id | exclusion
========|==============
1 | French only
3 | No magazine
4 | English only
1 | No magazine
是否可以查询数据库得到这样的结果?
$users = [
[
'id' => 1,
'name' => 'Tom',
'english_only' => false, // unset or null would be okay
'french_only' => true,
'no_magazine' => true,
],
// . . .
];
我一直在研究 GROUP_CONCAT
、PIVOT
和其他示例,但无法弄清楚它们如何适用或是否适用。
SQL Fiddle -- thought I could modify this 来匹配我的场景。我没有走那么远,正如你所看到的,我不知道我在做什么...
您可以在 select 中使用 IF 根据它们的值从 1 列中取出 3 列。
SELECT id, name,
IF(exclusion='English only',true,false) as english_only
IF(exclusion='French only',true,false) as french_only
IF(exclusion='No magazine',true,false) as no_magazine
FROM users, exclusions
WHERE users.id=exclusions.user_id
我从@RightClick 的 开始,但不得不为我的 SQL 服务器稍微调整一下。
SELECT User.id, User.name,
CASE WHEN Ex.exclusion = 'English Only' THEN 1 ELSE 0 END as english_only,
CASE WHEN Ex.exclusion = 'French Only' THEN 1 ELSE 0 END as french_only,
CASE WHEN Ex.exclusion = 'No magazine' THEN 1 ELSE 0 END as no_magazine
FROM users as User
LEFT JOIN exclusions Ex on User.id = Ex.user_id;
比我在谷歌搜索一整天后想的要简单得多...
我可以访问与此类似的数据库:
用户:
id | name
====|========
1 | Tom
2 | Dick
3 | Harry
4 | Sally
排除:
user_id | exclusion
========|==============
1 | French only
3 | No magazine
4 | English only
1 | No magazine
是否可以查询数据库得到这样的结果?
$users = [
[
'id' => 1,
'name' => 'Tom',
'english_only' => false, // unset or null would be okay
'french_only' => true,
'no_magazine' => true,
],
// . . .
];
我一直在研究 GROUP_CONCAT
、PIVOT
和其他示例,但无法弄清楚它们如何适用或是否适用。
SQL Fiddle -- thought I could modify this 来匹配我的场景。我没有走那么远,正如你所看到的,我不知道我在做什么...
您可以在 select 中使用 IF 根据它们的值从 1 列中取出 3 列。
SELECT id, name,
IF(exclusion='English only',true,false) as english_only
IF(exclusion='French only',true,false) as french_only
IF(exclusion='No magazine',true,false) as no_magazine
FROM users, exclusions
WHERE users.id=exclusions.user_id
我从@RightClick 的
SELECT User.id, User.name,
CASE WHEN Ex.exclusion = 'English Only' THEN 1 ELSE 0 END as english_only,
CASE WHEN Ex.exclusion = 'French Only' THEN 1 ELSE 0 END as french_only,
CASE WHEN Ex.exclusion = 'No magazine' THEN 1 ELSE 0 END as no_magazine
FROM users as User
LEFT JOIN exclusions Ex on User.id = Ex.user_id;
比我在谷歌搜索一整天后想的要简单得多...