Davood
4 سال پیش توسط Davood مطرح شد
5 پاسخ

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

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

@hesammousavi
@ali.bayat


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

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

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 هم استفاده کرد و در نهایت کد رو بهینه تر کرد.


الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 4 سال پیش مطرح شد
2

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


Davood
تخصص : PHP - Laravel
@dfardabasi 4 سال پیش مطرح شد
0

سلام
سال نو مبارک
یکم توضیحش سخته که بخوام بنویسم ولی
من 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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

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

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
تخصص : PHP - Laravel
@dfardabasi 4 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام