php选择字段数

时间:2016-09-25 10:59:20

标签: php mysql sql

我有一张桌子。它有一些列:f1t,f2t,...到... f18t。 而且我有$ id = 4.所以我想算一下f = t = $ id。 也许f2t,f10t和f15t = $ id。所以计数将是3

我该怎么做? 我试过了:

$sql2 = "SELECT (
(f1t = \"".$id."\")+
(f2t = \"".$id."\")+
(f3t = \"".$id."\")+
(f4t = \"".$id."\")+
(f5t = \"".$id."\")+
(f6t = \"".$id."\")+
(f7t = \"".$id."\")+
(f8t = \"".$id."\")+
(f9t = \"".$id."\")+
(f10t = \"".$id."\")+
(f11t = \"".$id."\")+
(f12t = \"".$id."\")+
(f13t = \"".$id."\")+
(f14t = \"".$id."\")+
(f15t = \"".$id."\")+
(f16t = \"".$id."\")+
(f17t = \"".$id."\")+
(f18t = \"".$id."\")
) AS totalCount FROM ".TB_PREFIX."fdata WHERE vref = ".$_SESSION['wid'];
$sql1 = mysql_query($sql2);
echo "<br>".$sql1;

感谢名单

2 个答案:

答案 0 :(得分:1)

基于目前为止我所理解的内容。

您需要使用+来获取count

要在所有行的4列中出现f1t .... f8t

SELECT 
( 
    (f1t = 4)+
    (f2t = 4)+
    (f3t = 4)+
    (f4t = 4)+
    (f5t = 4)+
    (f6t = 4)+
    (f7t = 4)+
    (f8t = 4)
) AS totalCount
FROM your_table

See Demo

注意:

由于MySQL布尔表达式解析为0/1,因此您可以在您的情况下使用它。

请注意(a=b) returns 1 only if a is equal to b otherwise it returns 0

<强> TEST:

-- ----------------------------
-- Table structure for `your_table`
-- ----------------------------
DROP TABLE IF EXISTS `your_table`;
CREATE TABLE `your_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  f1t INT,
  f2t INT,
  f3t INT,
  f4t INT,
  f5t INT,
  f6t INT,
  f7t INT,
  f8t INT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of your_table
-- ----------------------------
INSERT INTO `your_table` VALUES ('1', '2','3','4','4','1','8','4','9');
INSERT INTO `your_table` VALUES ('2', '2','8','1','5','4','8','4','9');
______

SELECT 
*
FROM your_table;

| id | f1t | f2t | f3t | f4t | f5t | f6t | f7t | f8t |
|----|-----|-----|-----|-----|-----|-----|-----|-----|
|  1 |   2 |   3 |   4 |   4 |   1 |   8 |   4 |   9 |
|  2 |   2 |   8 |   1 |   5 |   4 |   8 |   4 |   9 |

在这组数据上运行上面给出的查询,您将得到以下输出:

<强>输出:

| totalCount |
|------------|
|          3 |
|          2 |

建议:规范化您的数据

答案 1 :(得分:0)

我认为这不可能,你应该改变你的表的结构,以便f1t,f2t ...到... f18t将是行。然后你可以使用count运算符轻松完成它。