php - 如果条件为真,则选择数据

标签 php mysql select if-statement conditional-statements

我什至无法为自己解释这个问题,所以我创建了一个图像,因为它更容易理解。

表结构:enter image description here

如果红色字段为空且绿色字段为真,我想从蓝色字段中选择数据。我该怎么做呢? 我已经为此苦苦挣扎了一段时间。

无法更改表结构,因为它是从 wordpress contactform7 到数据库插件。

如果有任何帮助,我将不胜感激:)

只需选择一个电子邮件即可,

SELECT field_value FROM wp_cf7dbplugin_submits WHERE field_name = 'your-email'

现在我只想在 field_value = '' WHERE field_name = 'has-wp-user' 时选择电子邮件。

所以我想要的有点像这样;

SELECT field_value FROM wp_cf7dbplugin_submits WHERE field_name = 'your-email' IF has-wp-user = 'false'

是的。

沿途有可能吗?

表结构:

CREATE TABLE IF NOT EXISTS `wp_cf7dbplugin_submits` (
  `submit_time` decimal(16,4) NOT NULL,
  `form_name` varchar(127) CHARACTER SET utf8 DEFAULT NULL,
  `field_name` varchar(127) CHARACTER SET utf8 DEFAULT NULL,
  `field_value` longtext CHARACTER SET utf8,
  `field_order` int(11) DEFAULT NULL,
  `file` longblob,
  KEY `submit_time_idx` (`submit_time`),
  KEY `form_name_idx` (`form_name`),
  KEY `field_name_idx` (`field_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumpning av Data i tabell `wp_cf7dbplugin_submits`
--

INSERT INTO `wp_cf7dbplugin_submits` (`submit_time`, `form_name`, `field_name`, `field_value`, `field_order`, `file`) VALUES
('1387497601.8300', 'Bli medlem', 'has-wp-user', '', 0, NULL),
('1387497601.8300', 'Bli medlem', 'paid-membership-fee', 'true', 1, NULL),
('1387497601.8300', 'Bli medlem', 'your-name', 'Firstname Lastname ', 2, NULL),
('1387497601.8300', 'Bli medlem', 'your-email', 'email@mail.se', 3, NULL),
('1387497601.8300', 'Bli medlem', 'your-adress', 'theroad 12', 4, NULL),
('1387497601.8300', 'Bli medlem', 'your-zip', '76045', 5, NULL),
('1387497601.8300', 'Bli medlem', 'your-postal-area', 'postalarea', 6, NULL),
('1387497601.8300', 'Bli medlem', 'your-phonenumber', '0123456789', 7, NULL),
('1387497602.8300', 'Bli medlem', 'has-wp-user', '', 0, NULL),
('1387497602.8300', 'Bli medlem', 'paid-membership-fee', 'true', 1, NULL),
('1387497602.8300', 'Bli medlem', 'your-name', 'Firstname lastname', 2, NULL),
('1387497602.8300', 'Bli medlem', 'your-email', 'email@mail.se', 3, NULL),
('1387497602.8300', 'Bli medlem', 'your-adress', 'singövägen 156', 4, NULL),
('1387497602.8300', 'Bli medlem', 'your-zip', '76045', 5, NULL),
('1387497602.8300', 'Bli medlem', 'your-postal-area', 'grisslehamn', 6, NULL),
('1387497602.8300', 'Bli medlem', 'your-phonenumber', '0123456789', 7, NULL),
('1387584003.8300', 'Bli medlem', 'has-wp-user', '', 0, NULL),
('1387584003.8300', 'Bli medlem', 'paid-membership-fee', 'true', 1, NULL),
('1387584003.8300', 'Bli medlem', 'your-name', 'Firstname Lastname', 2, NULL),
('1387584003.8300', 'Bli medlem', 'your-email', 'email@mail.se', 3, NULL),
('1387584003.8300', 'Bli medlem', 'your-adress', 'gryta hagväg 6', 4, NULL),
('1387584003.8300', 'Bli medlem', 'your-zip', '76175', 5, NULL),
('1387584003.8300', 'Bli medlem', 'your-postal-area', 'norrtälje', 6, NULL),
('1387584003.8300', 'Bli medlem', 'your-phonenumber', '0123456789', 7, NULL),
('1387584004.8300', 'Bli medlem', 'has-wp-user', 'true', 0, NULL),
('1387584004.8300', 'Bli medlem', 'paid-membership-fee', '', 1, NULL),
('1387584004.8300', 'Bli medlem', 'your-name', 'Firstname Lastname', 2, NULL),
('1387584004.8300', 'Bli medlem', 'your-email', 'email@mail.se', 3, NULL),
('1387584004.8300', 'Bli medlem', 'your-adress', 'bergstigen 7', 4, NULL),
('1387584004.8300', 'Bli medlem', 'your-zip', '76192', 5, NULL),
('1387584004.8300', 'Bli medlem', 'your-postal-area', 'norrtälje', 6, NULL),
('1387584004.8300', 'Bli medlem', 'your-phonenumber', '0123456789', 7, NULL),
('1387584005.8300', 'Bli medlem', 'has-wp-user', '', 0, NULL),
('1387584005.8300', 'Bli medlem', 'paid-membership-fee', 'true', 1, NULL),
('1387584005.8300', 'Bli medlem', 'your-name', 'Firstname Lastname', 2, NULL),
('1387584005.8300', 'Bli medlem', 'your-email', 'email@mail.se', 3, NULL),
('1387584005.8300', 'Bli medlem', 'your-adress', 'robertsväg10 ', 4, NULL),
('1387584005.8300', 'Bli medlem', 'your-zip', '76045', 5, NULL),
('1387584005.8300', 'Bli medlem', 'your-postal-area', 'grisslehamn', 6, NULL),
('1387584005.8300', 'Bli medlem', 'your-phonenumber', '0123456789', 7, NULL);

最佳答案

select
*
from
my_table m inner join (
  select
  m.*
  from
  my_table m
  group by form_name, submit_time
  having sum(
    (field_name = 'has-wp-user' and field_value = '') 
    or 
    (field_name = 'paid-membership-fee' and field_value = 'true')
  ) = 2
) sq on m.form_name = sq.form_name and m.submit_time = sq.submit_time
where m.field_name in ('your-name', 'your-email');
  • 看到它在 sqlfiddle 中实时运行(更新了您的新数据)

其背后的想法是,每个 field_name 都属于一个组。我在这里假设它是 form_name 和 submit_time 列的组合。有了这个子查询

  select
  m.*
  from
  my_table m
  group by form_name, submit_time
  having sum(
    (field_name = 'has-wp-user' and field_value is null) 
    or 
    (field_name = 'paid-membership-fee' and field_value = 'true')
  ) = 2

然后您只选择那些 form_names,其中 field_name 行 has-wp-user 和 paid-membership-fee 的值分别为 null 和 true。现在您可以再次加入原始表,它只过滤掉允许的 form_names 并方便地选择您需要的行。

关于php - 如果条件为真,则选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22095628/

相关文章:

php - 如何在php中实现自动功能测试

mysql - 是否可以搜索一个值,可选择查看十进制值中的尾随 0

MySQL - 只需要选择行,其中对于 id,另一列中有两个可能的数字

mysql - 如何把这个mysql select 改成sql server select 语句?

mysql - 如何从行中选择数据并一次更新它们?

php - 为什么是 "hash(' md 5', ' string')"faster than "md5 ('string' )"?

php - 合并两个 MYSQL SELECT 查询

php - 如何根据国家/地区更改日期格式

php - 两个范围之间的MySQL查询

jQuery - 选择标签 - 获取所选元素的属性