Tôi đang cố gắng triển khai các bộ lọc trong PHP và MySQL để tìm kiếm bản ghi trong cơ sở dữ liệu .... các bộ lọc sẽ giống như nếu trong số 6 bộ lọc chỉ có hai bộ truy vấn được chọn sẽ thực hiện "và" Hoạt động cho hai dữ liệu này và tìm nạp dữ liệu từ cơ sở dữ liệu và nếu ba lần sau đó Nó sẽ thực hiện "và" Hoạt động cho ba bộ lọc này ..... Một cách để thực hiện là kiểm tra từng bộ lọc như thế nào.
if [isset[$_GET['name'] && isset[$_GET['city']]] {
// perform AND for these two
} elseif[isset[$_GET['name'] && [isset[$_GET['age']]] {
// perform AND for these three
}
// and so on ...
Nhưng vấn đề là nếu tôi có 6 bộ lọc thì tôi phải tạo 64 kết hợp cho nó ... Tôi nghĩ về điều đó có giải pháp thay thế nào tồn tại cho nó không?
miken32
40.6K16 Huy hiệu vàng100 Huy hiệu bạc142 Huy hiệu đồng16 gold badges100 silver badges142 bronze badges
hỏi ngày 9 tháng 2 năm 2019 lúc 13:11Feb 9, 2019 at 13:11
0
Điều này có thể hoạt động, giả sử rằng các khóa
$query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
0 của bạn khớp các cột trong bảng của bạn:$query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
$query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
1Tôi nghĩ rằng điều này có thể hoạt động, mặc dù mẫu mã này không bao gồm vệ sinh chống lại SQL, vì vậy có lẽ bạn nên thêm một cái gì đó để chà
Đã cập nhật: Đã thêm
2 để lọc ra bất kỳ trường trống nào từ mảng $query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
0: added $query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
$query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
2 to filter out any empty fields from $query = "SELECT * FROM table";
$filtered_get = array_filter[$_GET]; // removes empty values from $_GET
if [count[$filtered_get]] { // not empty
$query .= " WHERE";
$keynames = array_keys[$filtered_get]; // make array of key names from $filtered_get
foreach[$filtered_get as $key => $value]
{
$query .= " $keynames[$key] = '$value'"; // $filtered_get keyname = $filtered_get['keyname'] value
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
$query .= " AND";
}
}
}
$query .= ";"
0 arrayĐã trả lời ngày 9 tháng 2 năm 2019 lúc 13:56Feb 9, 2019 at 13:56
Tshimkustshimkustshimkus
1.2232 huy hiệu vàng17 Huy hiệu bạc23 Huy hiệu đồng2 gold badges17 silver badges23 bronze badges
5
single if condition to check value is empty or not.for non-empty then mysql query is two between 'AND' operation.
$query = 'select * from info';
$where = ' Where';
$and = 'id = 1';
if[!empty[$_GET['name']]]{
$and .= ' AND name="test"';
}
if[!empty[$_GET['city']]]{
$and .= ' AND city="test"';
}
$q = $query.''.$where.''.$and;
make like this query is 'select & from info where id=1 AND name="test" AND city="test"';
Đã trả lời ngày 9 tháng 2 năm 2019 lúc 13:35Feb 9, 2019 at 13:35
0
Bạn có thể sử dụng tiền tố cho các phần tử biểu mẫu, như bộ lọc-, vì vậy các mục sẽ trông giống như tuổi lọc, tên lọc, v.v. Bây giờ, hãy giả sử bạn có một chức năng như
function buildFilters[$input, $delimiter] {
foreach [$input as $key => $value] {
$filters = array[];
$filters[]="1=1";//default filter
if [strpos[$key, $prefix] === 0] {
//add the filter to $filters via $filters[]=yourvalue
}
}
return implode[$delimiter, $filters];
}
Và sau đó bạn có thể gọi nó như
$myFilters = buildFilters[$_POST, " AND "];
Đã trả lời ngày 9 tháng 2 năm 2019 lúc 16:27Feb 9, 2019 at 16:27
Lajos Arpadlajos ArpadLajos Arpad
57.8K32 Huy hiệu vàng95 Huy hiệu bạc166 Huy hiệu Đồng32 gold badges95 silver badges166 bronze badges
3
Tôi đã thử sử dụng câu trả lời từ @tshimkus. Có thể đó là cách tôi có các mảng được thiết lập hoặc một cái gì đó nhưng có một vài vấn đề tôi gặp phải trước khi làm cho nó hoạt động.
đường thẳng này:
$query .= " $keynames[$key] = '$value'";
Đối với tôi cần phải là:
$query .= " $key = '$value'";
Tôi cũng không nhận được séc [hiển thị bên dưới] cho mục cuối cùng hoạt động.
if [count[$filtered_get] > 1 && [count[$filtered_get] > $key]] { // more than one search filter, and not the last
Thay vào đó, kết thúc bằng cách sử dụng đếm cùng với điều này:
if[$i!==$len]{
Đã trả lời ngày 13 tháng 3 năm 2019 lúc 21:04Mar 13, 2019 at 21:04
0
$whereClause = ' ';
if [ !empty[$_POST['gender']] || !empty[$_POST['hobby']] || !empty[$_POST['search_filter']] ] {
$whereClause .= ' WHERE ';
if [ !empty[$_POST['gender']] && !empty[$_POST['hobby']] && !empty[$_POST['search_filter']] ] {
$whereClause .= ' gender = "'.$_POST['gender'].'" AND gender = "'.$_POST['gender'].'" AND search_filter LIKE "%'.$_POST['search_filter'].'%" ';
} else {
if [ !empty[$_POST['gender']] && $_POST['gender'] != "" && empty[$_POST['hobby']] && empty[$_POST['search_filter']] ] {
$whereClause .= ' gender = "'.$_POST['gender'].'" ';
}
else if [ [!empty[$_POST['gender']] && $_POST['gender'] != ""] && [!empty[$_POST['hobby']] || !empty[$_POST['search_filter']]]] {
$whereClause .= ' gender = "'.$_POST['gender'].'" ';
$whereClause .= ' AND ';
}
if [ !empty[$_POST['hobby']] && $_POST['hobby'] != "" && empty[$_POST['gender']] && empty[$_POST['name']]]{
$whereClause .= ' hobby = "'.$_POST['hobby'].'" ';
}
else if [ [!empty[$_POST['hobby']] && $_POST['hobby'] != ""] && [!empty[$_POST['gender']] || !empty[$_POST['search_filter']]]] {
$whereClause .= ' hobby = "'.$_POST['hobby'].'" ';
$whereClause .= ' AND ';
}
if [ !empty[$_POST['search_filter']]] {
$whereClause .= ' search_filter LIKE "%'.$_POST['search_filter'].'%" ';
}
}
}
Đã trả lời ngày 6 tháng 10 lúc 8:06Oct 6 at 8:06