جستجو در چند جدول با php mvc

PHP -
1 هفته پیش
توسط علی بیات آپدیت شد
Davood ( 24520 تجربه )
2 هفته پیش
تخصص : کارآموز PHP

سلام دوستان کوئری جستجو (search) چطوری میتونم بنویسم که تو چند جدول همزمان جستجو کنه
مثلا من میخوام وقتی پزشکی رو سرچ کرد اون شخص بره 5 تیبل منو جستجو کنه هرچی مربوط بود بیاره و نشون بده
حالا اگه تو هر پنج جدول بود که هیچ نبود مثلا نتیجه جستجو بقیه رو نشون بده

@hesammousavi
@ali.bayat

بهترین پاسخ انتخاب شده توسط Davood
علی بیات
2 هفته پیش

تابع زیر رو به کدهات اضافه کن:

function php_search_tables($search_keyword,$table_ass_array){

    global $conn;

    $db_hostname = 'DATABASE HOST NAME';                // database hostname (default value: localhost)
    $db_username = 'DATABASE USERNAME';                 // database username (default value: root)
    $db_password = 'DATABASE PASSWORD';                 // database password (default value: password)
    $db_database_name = 'DATABASE NAME';                // database name

    $conn = mysqli_connect($db_hostname, $db_username, $db_password, $db_database_name);

        if(mysqli_connect_errno()){     // Check connection
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        $rt = $table_ass_array;
        echo "<b>Given Keyword :</b> ".$search_keyword . '<br>';
        echo "<b>Given tables :</b> " . implode($rt,', ') . '<br>';

        if(count($rt) > 0){                             // check weather table column is not empty
            foreach($rt as $k=>$v){                         // iterate column name table
                echo $table = $k;
                echo $v;
                foreach($v as $r2){ // fetch data from respective column name

                    $colum = $r2;   //[0];
                    $sql_search_fields = $colum . " LIKE ('%" . $search_keyword . "%')";
                    $sql_search = "SELECT * FROM " . $table . " WHERE " . $sql_search_fields;
                    $rs3 = $conn->query($sql_search);

                    if($rs3->num_rows > 0){                 // check weather 'keyword' found or not

                        echo "<ul><u>Table :" . $table . '</u>';
                        while($r3 = $rs3->fetch_array()){   // fetch result from respective data
                            $count++;
                            echo "<li> Column Name : " . $colum . "</li>";
                            echo "<li> Row  : " . $r3['ROW ID'] . "</li>";  // primary key column name
                            echo "<li> Value : " . $r3[$colum] . "</li><br>";

                        }   // while loop close

                    }   // table data count close
                    echo "</ul>";

                }   //foreach close

                echo $table." Searching End's Here<hr>";

            }   //foreach close

        }   // Table count close
}

بعد میتونی اسم جدول ها و فیلدهاشون رو توی یه آرایه ذخیره کنی:

$tables_array = array( 
            'news_tbl' => array(            // TABLENAME 1 to search in
                        'title',            // Column Name A to search in
                        'img'           // Column Name B to search in
                        ),
            'needs_tbl' => array(           // TABLENAME 2 to search in
                        'title',            // Column Name A to search in
                        'picture'           // Column Name B to search in
                        )
            );

و به شکل زیر ازش استفاده کن:

php_search_tables($keyword, $tables_array);

البته میشه از PDO هم استفاده کرد و در نهایت کد رو بهینه تر کرد.

الیاس بشکنی ( 69605 تجربه )
2 هفته پیش
تخصص : در حال یادگیری

ببخشید خوب متوجه نشدم
خب شما همینطوری عادی کوئری بزنید برای هر جدول
یه آرایه از نتایج درست کنین
بعدش نتایج هر جدول رو بریزن تو آرایه
از آخر همون آرایه رو برگردونین به کاربر نشون بدین
اگه منظور خاصی دارین بیشتر توضیح بدین

Davood ( 24520 تجربه )
2 هفته پیش
تخصص : کارآموز PHP

سلام
سال نو مبارک
یکم توضیحش سخته که بخوام بنویسم ولی
من 5 تا جدول دارم به نام های news_tbl - podcast_tbl - video_bl - needs_tbl - advertise_tbl
حالا من میخوام کوئری بنویسم با pdo که وقتی مثلا تو باکس سرچ تایپ میکنم بازار - پزشکی یا هرچیز دیگه ای
بره داخل این 5 تا جدول بگرده و نتایج رو بهم برگردونه حالا یا تو همه جدول ها هست یا نه مثلا یک یا دو جدول

از این 5 تا جدول هم سه تا فیلد میخوام بکشم بیرون که دو تا تو همشون مشترکه اسماشون یکسانه
id و title
سومی هم عکسه که متفاوته یه جا img هست یه جا picture یه جا آیکن

حالا من میخوام ببینم چطوری این کوئری رو بزنم

یه پارامتر get ارسالی دارم با 5 تا جدول و 5 تا دستور like

@elyasbeshkani
@hesammousavi
@ali.bayat

علی بیات ( 296347 تجربه )
2 هفته پیش
تخصص : توسعه دهنده ارشد وب

تابع زیر رو به کدهات اضافه کن:

function php_search_tables($search_keyword,$table_ass_array){

    global $conn;

    $db_hostname = 'DATABASE HOST NAME';                // database hostname (default value: localhost)
    $db_username = 'DATABASE USERNAME';                 // database username (default value: root)
    $db_password = 'DATABASE PASSWORD';                 // database password (default value: password)
    $db_database_name = 'DATABASE NAME';                // database name

    $conn = mysqli_connect($db_hostname, $db_username, $db_password, $db_database_name);

        if(mysqli_connect_errno()){     // Check connection
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        $rt = $table_ass_array;
        echo "<b>Given Keyword :</b> ".$search_keyword . '<br>';
        echo "<b>Given tables :</b> " . implode($rt,', ') . '<br>';

        if(count($rt) > 0){                             // check weather table column is not empty
            foreach($rt as $k=>$v){                         // iterate column name table
                echo $table = $k;
                echo $v;
                foreach($v as $r2){ // fetch data from respective column name

                    $colum = $r2;   //[0];
                    $sql_search_fields = $colum . " LIKE ('%" . $search_keyword . "%')";
                    $sql_search = "SELECT * FROM " . $table . " WHERE " . $sql_search_fields;
                    $rs3 = $conn->query($sql_search);

                    if($rs3->num_rows > 0){                 // check weather 'keyword' found or not

                        echo "<ul><u>Table :" . $table . '</u>';
                        while($r3 = $rs3->fetch_array()){   // fetch result from respective data
                            $count++;
                            echo "<li> Column Name : " . $colum . "</li>";
                            echo "<li> Row  : " . $r3['ROW ID'] . "</li>";  // primary key column name
                            echo "<li> Value : " . $r3[$colum] . "</li><br>";

                        }   // while loop close

                    }   // table data count close
                    echo "</ul>";

                }   //foreach close

                echo $table." Searching End's Here<hr>";

            }   //foreach close

        }   // Table count close
}

بعد میتونی اسم جدول ها و فیلدهاشون رو توی یه آرایه ذخیره کنی:

$tables_array = array( 
            'news_tbl' => array(            // TABLENAME 1 to search in
                        'title',            // Column Name A to search in
                        'img'           // Column Name B to search in
                        ),
            'needs_tbl' => array(           // TABLENAME 2 to search in
                        'title',            // Column Name A to search in
                        'picture'           // Column Name B to search in
                        )
            );

و به شکل زیر ازش استفاده کن:

php_search_tables($keyword, $tables_array);

البته میشه از PDO هم استفاده کرد و در نهایت کد رو بهینه تر کرد.

Davood ( 24520 تجربه )
2 هفته پیش
تخصص : کارآموز PHP

@ali.bayat
ممنونم از شما استاد
مشکلم حل شد
کدی که برام گذاشتید
کاملا کاربردی بود برام

علی بیات ( 296347 تجربه )
1 هفته پیش
تخصص : توسعه دهنده ارشد وب

خواهش میکنم
موفق باشید

برای ارسال پاسخ باید وارد سایت شوید