gpt4 book ai didi

php - 如何制作排除没有所有参数的行的SQL查询

转载 作者:行者123 更新时间:2023-11-30 21:31:55 26 4
gpt4 key购买 nike

我有一个搜索框,我让用户输入他们想要搜索的关键词。提交时,我将输入框中的单词(如果有多个)拆分为一个数组,并对每个单独的单词执行查询。使用 SQL 我可以获得至少具有一个值的结果,问题是我只想获取在一列或另一列中至少具有所有参数的行。

public function employeeSearchAction()
{
if ($this->user_permissions < 1) {
return 0;
}
// split search string into array based on spaces
if ($this->data != '') {
$searchParams = explode(' ', trim($this->data));
// get any rows with any one of these values in them
foreach ($searchParams as $s) {
$this->db->orWhere('user_firstname', '%'.$s.'%', 'like');
$this->db->orWhere('user_lastname', '%'.$s.'%', 'like');
$this->db->orWhere('user_email1', '%'.$s.'%', 'like');
$this->db->orWhere('user_phn_1', '%'.$s.'%', 'like');
$this->db->orWhere('user_phn_2', '%'.$s.'%', 'like');
$this->db->orWhere('user_phn_3', '%'.$s.'%', 'like');
// $this->db->orWhere('user_address1', '%'.$s.'%', 'like');
$this->db->orWhere('user_position', '%'.$s.'%', 'like');
$this->db->orWhere('user_type', '%'.$s.'%', 'like');
$this->db->orWhere('user_division', '%'.$s.'%', 'like');
// $this->db->orWhere('user_position', $s);
// $this->db->orWhere('user_type', $s);
// $this->db->orWhere('user_division', $s);
}
$this->db->having('owner_id', $this->owner_id);
$binaryArray = array_fill(0, sizeof($searchParams), 0);
$results = $this->db->get('tblusers');
$filtered = [];
// filter rows to ensure that all rows have every parameter
foreach ($results as $r) {
$binaryArray = array_fill(0, sizeof($searchParams), 0);
foreach ($binaryArray as $key=>$b) {
if (strpos(strtolower($r['user_firstname']), strtolower($searchParams[$key])) !== false ||
strpos(strtolower($r['user_lastname']), strtolower($searchParams[$key])) !== false ||
strpos($r['user_email1'], strtolower($searchParams[$key])) !== false ||
strpos($r['user_phn_1'], strtolower($searchParams[$key])) !== false ||
strpos($r['user_phn_2'], strtolower($searchParams[$key])) !== false ||
strpos($r['user_phn_3'], strtolower($searchParams[$key])) !== false ||
strpos(strtolower($r['user_position']), strtolower($searchParams[$key])) !== false ||
strpos(strtolower($r['user_type']), strtolower($searchParams[$key])) !== false ||
strpos(strtolower($r['user_division']), strtolower($searchParams[$key])) !== false
// strpos($r['user_address1'], strtolower($searchParams[$key])) !== false
) {
$binaryArray[$key] = 1;
}
}
if (!in_array(0, $binaryArray)) {
$filtered[] = $r;
}
}
} else {
$this->db->where('owner_id', $this->owner_id);
$filtered = $this->db->get('tblusers');
}
foreach ($filtered as $r) {
$user_phn_1 = $r['user_phn_1'] == '' ? 'N/A' : '<a href="tel:+1'.$r['user_phn_1'].'">'.preg_replace("/[^0-9]/", "", $r['user_phn_1']).'</a>';
$user_phn_2 = $r['user_phn_2'] == '' ? 'N/A' : '<a href="tel:+1'.$r['user_phn_2'].'">'.$r['user_phn_2'].'</a>';
$user_position = $r['user_position'] == '' ? 'N/A' : $r['user_position'];
$user_type = $r['user_type'] == '' ? 'N/A' : $r['user_type'];
$user_division = $r['user_division'] == '' ? 'N/A' : $r['user_division'];
$user_email1 = $r['user_email1'] == '' ? 'N/A' : '<a href="mailto:'.$r['user_email1'].'">'.$r['user_email1'].'</a>';
$user_address1 = $r['user_address1'] == '' ? 'N/A' : '<a href="https://maps.google.com/maps?q='.$r['user_address1'].'">'.$r['user_address1'].'</a>';
$user_firstname = $r['user_firstname'] == '' ? 'N/A' : $r['user_firstname'];
$user_lastname = $r['user_lastname'] == '' ? 'N/A' : $r['user_lastname'];
$r['is_ready'] != 1 ? $user_firstname .= ' <i title="Employee is not ready to work." class="orange fas fa-exclamation-triangle"></i>' : '';
echo "
<div class='search-form_row-container'>
<div class='col-xs-6 col-sm-6'>
<i class='fas fa-file-signature'>
<span class='results-text results-text--name'>$user_lastname $user_firstname</span>
</i>
</div>
<div class='col-xs-6 col-sm-6'>
<i class='fas fa-phone'>
<span class='results-text results-text--phone'>{$user_phn_1}</span>
</i>
</div>
<div class='col-xs-6 col-sm-6'>
<a href='/includes/sql/store/users/curr_user.php?id={$r['user_id']}&goto=/users/user_profile_main.php'>
<i class='fas fa-link'>
<span class='results-text results-text--edit'>View Profile</span>
</i>
</a>
</div>
<div class='col-xs-6 col-sm-6'>
<i class='fas fa-suitcase-rolling'>
<span class='results-text results-text--position'>$user_position</span>
</i>
</div>
<div class='col-xs-6 col-sm-6'>
<i class='fas fa-map-marker-alt'>
<span class='results-text results-text--type'>$user_type</span>
</i>
</div>
<div class='col-xs-6 col-sm-6'>
<i class='fas fa-i-cursor'></i>
<span class='results-text results-text--division'>$user_division</span>
</i>
</div>
</div>
";
}
}

我所拥有的一切都在发挥应有的作用,但我还是忍不住注意到它是多么的丑陋和低效。查看代码您会知道我没有使用原始查询,我使用的是 https://github.com/ThingEngineer/PHP-MySQLi-Database-Class Mysqlidb。如果您想放弃以那种格式表达您的答案,没关系,这个库可以使用原始查询。任何帮助表示赞赏。我只是宁愿只检索包含所有参数的记录,而不是至少包含一个参数的记录,然后用 PHP 过滤掉它们。

编辑:我的意图是能够只使用这个 SQL

最佳答案

您需要运行一个查询来获取所有用户的数据。对于每个用户,您需要检查该用户的数据是否包含每个关键字。如果用户数据包含所有关键字,则用户可以包含在搜索结果中。

所以你需要有嵌套循环。外循环检查每个用户。内部循环检查用户数据中的每个关键字。如果用户数据包含所有关键字,则将用户包含在搜索结果中。如果其中一个关键字不存在于用户数据中,则中断内部循环并检查下一个用户。

关于php - 如何制作排除没有所有参数的行的SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55753078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com