我想根据一列的值选择特定的列。
目前,我所做的是获取特定列的值并使用它来进行另一个查询。像这样:
SELECT service_type FROM agreements WHERE id = 1;
我会将值传递给PHP变量,并根据结果进行另一个查询。
示例代码:
if (service == 'internet')
SELECT ipreq, latency, ... FROM agreements WHERE id = 3 AND service_type = 'internet';
else
SELECT rates, markup, ... FROM agreements WHERE id = 3 AND service_type = 'vpn';
有没有办法在不诉诸多个查询的情况下执行此操作?
P.S。
有些列来自另一个表。我只想根据列的值选择特定表中的特定列(在本例中为service_type
)
答案 0 :(得分:1)
好吧,假设在应用程序的进一步过程中,您可以相同地使用结果列,您可以尝试使用
SELECT * FROM
(
select service, ipreq, latency, ... FROM agreements WHERE id = 3
UNION ALL
select service, rates, markup, ... FROM agreements WHERE id = 3
) tmp
WHERE service = 'internet'
这将为id = 3
选择所有可能条目的组合,然后按service
选择您需要的条目。
但是,这只适用于所有字段都具有相同类型。
您可能还应该重命名字段以统一对它们的访问权限,例如
SELECT * FROM
(
select service, ipreq as field1, latency as field2, ... FROM agreements WHERE id = 3
UNION ALL
select service, rates as field1, markup as field2, ... FROM agreements WHERE id = 3
) tmp
WHERE service = 'internet'
如果您不想这样做,则需要通过应用程序中的列索引访问它们。字段类型仍然必须相同。
修改强>
以下是更新后的代码:
SELECT * FROM
(
SELECT doc.id as docid, service, ipreq, latency,... FROM agreements WHERE service = 1
UNION ALL
SELECT doc.id as docid, service, rates, markup,... FROM agreements WHERE service = 2
) as tmp
WHERE docid = 1
现在,此代码将选择与特定服务类型相关的所有字段。
答案 1 :(得分:0)
Mysql支持Control Flow Syntax,它允许您在查询中构建IF / ELSE。您甚至可以在If / Else语句中使用Subqueries来创建非常动态的select语句。