如果要过滤作为值或NULL的属性值,使用WHERE子句似乎很棘手。
这用于Retool(动态MySQL环境)。我试图将其拆分为不同的AND子句,但它似乎比看起来更难,因为值需要一个方程式,而IS NULL则不需要。
import React from 'react';
import { selectAll } from '../actions';
import { connect } from 'react-redux';
const CheckAll = () => {
return (
<div>
TodoList <input type="checkbox" onChange={e => {
e.preventDefault();
selectAll()
}}/>
</div>
)
}
const mapDispatchToProps = dispatch => {
return {
selectAll: () => dispatch({type: 'SELECT_ALL'})
}
}
export default connect(mapDispatchToProps)(CheckAll);
import React from 'react';
import { connect } from 'react-redux';
import { removeTodo } from '../actions';
const TodoList = ({ todos, removeTodo }) => {
return (
<div>
{todos.map((todo) => {
return (
<li key={todo.id}>
// checkbox should be toggling here when somene clicks on the selectAll checkbox.
<input type="checkbox" checkbox="false"/>
{todo.text}
<span onClick={e => removeTodo(todo.id, 1)}>x</span>
</li>
)
} )}
</div>
)
}
const mapDispatchProps = dispatch => {
return {
removeTodo: id => dispatch(removeTodo(id))
}
}
const mapStateToProps = state => {
return {
todos: state.reducer || []
}
}
export default connect(mapStateToProps, mapDispatchProps)(TodoList);
// the reducer below
const reducer = (state = [], action) => {
switch(action.type) {
case 'ADD_TODO':
return [
...state,
{
id: action.id,
text: action.payload,
completed: action.completed
}
];
case 'REMOVE_TODO':
return state.filter(({id}) => id !== action.id);
case 'SELECT_ALL':
console.log('');
const allMarked = state.every(action => action.completed);
return state.map(todo => ({
...todo,
completed: !allMarked
}));
default:
return state;
}
}
export default reducer;
我需要一个根据复选框的状态提供列表的查询:
如果checkbox = true,我想选择过滤值为0的记录
如果checkbox = false,我想选择过滤器值为1或为空的记录
答案 0 :(得分:1)
不是。您可以只使用OR
:
WHERE (filter = {{checkbox1.value}} OR {{checkbox1.value}} IS NULL)
答案 1 :(得分:1)
目前还不清楚您要检查为空的内容,我想您是说filter
:
SELECT *
FROM table
WHERE
({{checkbox1.value}} AND filter = 0)
OR
((NOT {{checkbox1.value}}) AND coalesce(filter, 1) = 1))
ORDER BY order DESC
答案 2 :(得分:0)
在MySQL中,查询中的IF语句像这样
IF(条件,value_if_true,value_if_false)
而2nd和3rd参数是可选的,而第一个参数是必需的。
所以答案可能是
选择* 从表 过滤器= IF({{checkbox1.value}} = TRUE,0,1)并且为空 按订单DESC
答案 3 :(得分:0)
如果checkbox = true,我想选择过滤值是的记录 0
如果checkbox = false,我想选择记录中过滤值的位置 是1或为空
几乎从字面上翻译为代码:
WHERE
CASE
WHEN {{checkbox1.value}} = TRUE THEN filter = 0
WHEN {{checkbox1.value}} = FALSE THEN filter = 1 OR filter IS NULL
END
可以简称为
WHERE
CASE {{checkbox1.value}}
WHEN TRUE THEN filter = 0
WHEN FALSE THEN COALESCE(filter, 1) = 1
END
但是由于在MySQL中,TRUE
和FALSE
只是1
和0
的别名,因此您也可以使用以下方式表达相同的逻辑
WHERE COALESCE(filter, 1) = (NOT {{checkbox1.value}})
或
WHERE COALESCE(filter, 1) = (1 - {{checkbox1.value}})