0

我想根据一列的值选择特定的列。

目前,我所做的是获取特定列的值并使用它来进行另一个查询。像这样:

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';

有没有办法做到这一点而无需进行多个查询?

附言

一些列来自另一个表。我只想根据列的值从特定表中选择特定列(在这种情况下service_type

4

2 回答 2

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

现在,此代码将选择与特定服务类型相关的所有字段。

于 2013-06-12T14:52:11.403 回答
0

Mysql 支持控制流语法,它允许您在查询中构建您的 IF/ELSE。您甚至可以在 If/Else 语句中使用子查询来创建非常动态的选择语句。

于 2013-06-12T14:50:52.047 回答