PDA

View Full Version : جست و جوی پیچیده



olampiad
شنبه 04 شهریور 1396, 12:37 عصر
سلام و عرض ادب و احترام
من یک روزی روی این جست و جو وقت گذاشتم ولی دیوونم کرد
به این کد من نگاه کنین .
خواهشا به عکس هایی که هم میفرستم نگاه کنین .
بهترین کوئزی برای این کد من چی میتونه باشه .
من میخوام :
وقتی طرف فقط شماره بارنامه رو هم نوشت ، اون فیلد بیاره .
یا
هم شماره بارنامه و هم نوع سنگ و هم درجه رو نوشت بره همون رو بیاره .

منظورم اینه که گاهی وقت ها کاربر یکی از فیلد هارو پر میکنه و میخواد که اطلاعات رو جست وجو کنه و گاهی وقتا سه تا فیلد رو پر میکنه و گاهی وقتا 5 تا فیلد رو .
من میخوام هر فیلدی که پر نکرد و یا انتخاب نکرد تاثیری نداشته باشه .
من برای option یه مقداری با 0 وعنوان مهم نبست گذاشتم تا انتخاب نکرد کار نکنه .(همون مقدار صفر رو بفرسته)

خیلی خیلی ممنون



$this->view->alldata=$this->model->sel("select * from `barnameh` where `id`='$id' or `shb` like '%$shb%' or `mine_id`='$mine_id' or `darajeh`='$darajeh' or `vazn` like '%$vazn%' or `ton` like '%$ton%' or `price` like '%$price%' or `time_time` like '%$time_time%' or `driver_id`='$driver_id' or `kerayeh` like '%$kerayeh%' or `salemali_id`='$salemali_id' ");


146140
146139

olampiad
شنبه 04 شهریور 1396, 13:24 عصر
گاهی وقت ها کاربر میخواد جست و جو فقط بر اساس یک فیلد باشد و گاهی وقت ها میخواهد جست وجو بر اساس چند فیلد باشد.
گاهی وقت ها کاربر میخواد ففط شماره بارنامه رو بزنه و اطلاعات بیاره ولی گاهی وقت ها منخواد تمام ردیف هایی که معدن فلان هستن و درجه فلان هستن و راننده فلان هستن بیاره .
آیا این کار ممکن هستش ؟
احساس میکنم که نتونستم منظورمو برسونم .

680100
شنبه 04 شهریور 1396, 15:24 عصر
من یه راهی براتون پیشنهاد میدم
که شاید کمکتون کنه

شما اسم input هاتون رو به این شکل در نظر بگیرید




<input name="column['id']" value="" />
<input name="column['shb']" value="" />
<input name="column['mine_id']" value="" />
<input name="column['driver_id']" value="" />
<input name="column['darajeh']" value="" />
<input name="column['vazn']" value="" />
<input name="column['ton']" value="" />
<input name="column['kerayeh']" value="" />
<input name="column['salemali_id']" value="" />
<input name="column['time_time']" value="" />
<input name="column['price']" value="" />



وقتی مقادیرش انتخاب بشند و submit شد
تو قسمت back-end راحت می تونی مانور بدی روی دیتاهای که آمده
برای مثال






$columns = isset($_POST['column']) ? $_POST['column'] : [];
$filters = [];

foreach($columns as $column)
{
if(isset($column['id']) AND !empty($column['id']))
$filters[] = 'id= ' . intval($column['id']);

if(isset($column['mine_id']) AND !empty($column['mine_id']))
$filters[] = 'mine_id= ' . intval($column['mine_id']);

if(isset($column['salemali_id']) AND !empty($column['salemali_id']))
$filters[] = 'salemali_id= ' . intval($column['salemali_id']);

if(isset($column['driver_id']) AND !empty($column['driver_id']))
$filters[] = 'driver_id= ' . intval($column['driver_id']);

if(isset($column['darajeh']) AND !empty($column['darajeh']))
$filters[] = 'darajeh= ' . intval($column['darajeh']);

if(isset($column['vazn']) AND !empty($column['vazn']))
$filters[] = 'vazn= ' . intval($column['vazn']);

if(isset($column['ton']) AND !empty($column['ton']))
$filters[] = 'ton= ' . intval($column['ton']);

if(isset($column['kerayeh']) AND !empty($column['kerayeh']))
$filters[] = 'kerayeh= ' . intval($column['kerayeh']);

if(isset($column['time_time']) AND !empty($column['time_time']))
$filters[] = 'time_time LIKE ' . "'%$column[time_time]%'";

if(isset($column['price']) AND !empty($column['price']))
$filters[] = 'price LIKE ' . "'%$column[price]%'";

if(isset($column['shb']) AND !empty($column['shb']))
$filters[] = 'shb LIKE ' . "'%$column[shb]%'";
}

$filtersColumns = (count($filters)) ? ' where (' . implode(' or ', $filters) . ')' : null;


$sqlQuery = 'select * from barnameh ' . $filtersColumns;






مثال که نشد ، کامل گفتم

اینجا از طریق پست که داره میفرسته اندیکس column رو میگیره و پاس میده به foreach و تو این حلقه دیتاهای که هست رو می چسبونه به آرایه و در آخر آرایه رو با or به رشته تبدیل میکنی
رشته رو به کوئری میدی
موردی بود بفرمایید

680100
شنبه 04 شهریور 1396, 15:32 عصر
در واقع برای شفاف سازی کد توی حلقه شروط رو برای تست کامل نوشتم
در واقع توی یکی دو خط این چند خط رو میشه نوشت