Javascript 如果选择“所有年份”选项,则共享相同的php函数

Javascript 如果选择“所有年份”选项,则共享相同的php函数,javascript,php,jquery,Javascript,Php,Jquery,如果用户从selYear下拉列表中选择一年,则此选项有效 如果选择了all,问题在于date列中没有这样的值 当然,我可以在php端编写一个单独的函数,但最好共享相同的函数(sel_year) 如何做到这一点?只需为IF$a==“all”创建一个IF语句 我的简短解决方案,灵感来自(使用) 这个解决方案比较短,但老实说,我认为这与可读性/可维护性没有多大关系,所以我可能仍然会使用第一个解决方案。我也怀疑您是否会看到这些方面的性能差异,但是如果我不得不猜测的话,第一个解决方案可能会稍微更有效一些

如果用户从
selYear
下拉列表中选择一年,则此选项有效

如果选择了
all
,问题在于
date
列中没有这样的值

当然,我可以在php端编写一个单独的函数,但最好共享相同的函数(
sel_year


如何做到这一点?

只需为IF
$a==“all”
创建一个IF语句


我的简短解决方案,灵感来自(使用)


这个解决方案比较短,但老实说,我认为这与可读性/可维护性没有多大关系,所以我可能仍然会使用第一个解决方案。我也怀疑您是否会看到这些方面的性能差异,但是如果我不得不猜测的话,第一个解决方案可能会稍微更有效一些,因为您不必多次检查
$a==“all”
,我也不确定ternaries是否更有效。

只需为if
$a==“all”
创建一个if语句


我的简短解决方案,灵感来自(使用)


这个解决方案比较短,但老实说,我认为这与可读性/可维护性没有多大关系,所以我可能仍然会使用第一个解决方案。我也怀疑您是否会看到这些方面的性能差异,但如果我不得不猜测,第一个解决方案可能会稍微更有效,因为您不必多次检查
$a==“all”
,我不确定三元数是否更有效。

您可以在函数
sel\u year
中编写一个if语句,用于检查
$a
的值。如果该值为
all
,则可以为
$db->prepare
提供一个单独的SQL字符串,而无需检查日期,从而有效地返回所有日期。

您可以在函数
sel_year
中编写一条If语句来检查
$a
的值。如果该值为
all
,则可以在不检查日期的情况下为
$db->prepare
提供单独的SQL字符串,从而有效地返回所有日期。

您可以在函数中检查
$a
的值:

//set default values
$sql = 'SELECT id, date FROM arts WHERE date LIKE :adate ORDER BY date DESC';
$params = [':adate' => "$a%"];

//check if $a === 'all', if it is, change $sql and $params, if it's not, leave defaults
$sql = $a === 'all' ? 'SELECT id, date FROM arts ORDER BY date DESC' : $sql;
$params = $a === 'all' ? [] : $params;

$st = $db->prepare($sql);
$st->execute($params);

您可以在函数中检查
$a
的值:

//set default values
$sql = 'SELECT id, date FROM arts WHERE date LIKE :adate ORDER BY date DESC';
$params = [':adate' => "$a%"];

//check if $a === 'all', if it is, change $sql and $params, if it's not, leave defaults
$sql = $a === 'all' ? 'SELECT id, date FROM arts ORDER BY date DESC' : $sql;
$params = $a === 'all' ? [] : $params;

$st = $db->prepare($sql);
$st->execute($params);


为什么不使用if语句来表示a==all,选择时不使用where?@grumpycruton I forgott
global$db
,为什么不使用if语句来表示a==all,选择时不使用where?@grumpycruton I forgott
global$db
,它可以通过添加select(因为这两种情况相同)和if$a!=='所有人都在where@treyBakeIdk,看起来它不会那么冗长,更难维护。。大概我想我只是喜欢尽可能少的几行,事实上,我会添加一个答案,我会演示我的方法:)@treyBake我很想看看它是如何减少几行,我想我的解决方案已经很短:)也许我在用三元组作弊;)hahayou可以通过添加select(两种情况都一样)和if$a!='所有人都在where@treyBakeIdk,看起来它不会那么冗长,更难维护。。大概我想我只是喜欢尽可能少的几行,事实上,我会添加一个答案,我会演示我的方法:)@treyBake我很想看看它是如何减少几行,我想我的解决方案已经很短:)也许我在用三元组作弊;)hahanote:我会afk,但会在回家时回顾^^如果不好,会删除:p如果我更担心短代码,而不关心可维护性,我可能会这样做。在这种情况下,可维护性可能不是一个巨大的负担,因为它无论如何都是一个简单的函数,但我仍然希望我的代码比这更干净一些(特别是因为我的代码只长2行),我也讨厌对同一个子句进行多次检查。好答案!也就是说,我用了一个与你的长度要求相匹配的版本更新了我的答案,但我相信它也更具可读性:)而且,
[':adate'=>$a]
应该是
[':adate'=>“$a%”]
(基于OP的代码)@GrumpyCrouton哈哈,一些有效的观点,我对你的编辑投了赞成票,一些好看的代码,你是对的!将修改我的参数:)注意:我会afk,但会在主页上查看^^如果不好,将删除:p如果我更担心短代码,而不关心可维护性,我可能会这样做。在这种情况下,可维护性可能不是一个巨大的负担,因为它无论如何都是一个简单的函数,但我仍然希望我的代码比这更干净一些(特别是因为我的代码只长2行),我也讨厌对同一个子句进行多次检查。好答案!也就是说,我用了一个与你的长度要求相匹配的版本更新了我的答案,但我相信它也更具可读性:)而且,
[':adate'=>$a]
应该是
[':adate'=>“$a%”]
(基于OP的代码)@GrumpyCrouton哈哈,一些有效的观点,我对你的编辑投了赞成票,一些好看的代码,你是对的!将修改我的参数:)
//default query
$sql = "SELECT id, date FROM arts WHERE date LIKE :adate ORDER BY date DESC";

//default params
$params = [":adate" => $a . "%"];

//check if input is "all"
if($a == "all") {

    //overwrite default query if $a == "all"
    $sql = "SELECT id, date FROM arts ORDER BY date DESC";

    //overwrite default params
    $params = [];
}

$st = $db->prepare($sql);
$st->execute($params);

//...rest of code
//set default values
$sql = 'SELECT id, date FROM arts WHERE date LIKE :adate ORDER BY date DESC';
$params = [':adate' => "$a%"];

//check if $a === 'all', if it is, change $sql and $params, if it's not, leave defaults
$sql = $a === 'all' ? 'SELECT id, date FROM arts ORDER BY date DESC' : $sql;
$params = $a === 'all' ? [] : $params;

$st = $db->prepare($sql);
$st->execute($params);
$sql = 'SELECT `id`, `date` FROM `arts` '; # select is the same either case
$orderBy = 'ORDER BY `date` DESC;'; # as is order by
$where = ($a === 'all' ? 'WHERE `date` LIKE :adate' : ''); # ternary to see if we need a where
$params = ($a === 'all' ? [] : [':adate' => $a. '%']); # same applies to params

$stmt = $db->prepare($sql. $where .$orderBy); # and exec
$stmt->execute($params);