4 / 2 / 2
Регистрация: 02.02.2021
Сообщений: 206
1

Как правильно сделать цикл поиска по БД

04.10.2022, 10:51. Показов 275. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, подскажите как правильно реализовать поиск по БД:
в таблице есть ID объекта, ownerID -в какой папке лежит этот файл/папка ( это нужно для отображения) и nameDir -название папки
делаю такой запрос на поиск :
PHP
1
2
3
4
5
6
7
$t_sql =" SELECT ownerID
                    FROM [Project].[dbo].[_files]
                    WHERE fileDescr LIKE $shifr%0.% and fileDescr NOT LIKE '%pdf%'
                    GROUP by ownerID";
                    $query =sqlsrv_query($conndev,$t_sql); // выпонляем запрос
                        if ($query == FALSE)  echo (sqlsrv_errors());
                        while ($row_shifr = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {}
Эти запросом получаю Id папки в которой лежит файл, затем проверяю на условие вот так:
PHP
1
2
3
4
5
6
7
8
9
$ownerID = $row_shifr['ownerID'];
                        $a_sql ="SELECT ownerID, ID, dirName FROM [CurProjects].[dbo].[Z_915020R_contents] WHERE ID = $ownerID";
                        $a_query =sqlsrv_query($conndev,$a_sql); // выполyяем запрос
                            if ($query == FALSE)  echo (sqlsrv_errors());
                            while ($a_row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {
                                $pos1 = stripos($a_row['dirName'], $mask1);
                                $pos2 = stripos($a_row['dirName'], $mask2);
                                $a_ownerID = $row_shifr['ownerID'];
                                if(($pos1 === false) and ($pos2 === false)){
И если nameDir не соотвествует условию(названию папки) то мне нужно искать дальше - т.е я беру ownerID папки подставляю его в ID и нужно оптяь проверить на условие nameDIR, подскажите как можно это в цикл можно облечь , а то я делаю опять запрос и понимаю что не совсем верно делаю:

PHP
1
2
3
4
5
6
7
8
9
10
11
                                 $b_sql ="SELECT ownerID, ID, dirName FROM [CurProjects].[dbo].[Z_915020R_contents] WHERE ID =$a_ownerID";
                                 $b_query =sqlsrv_query($conndev,$b_sql); // выполняем запрос
                                    while ($b_row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {
                                    $pos1 = stripos($b_row['dirName'], $mask1);
                                    $pos2 = stripos($b_row['dirName'], $mask2);
 
                                    }
                                }
                            }
                        }
                    }
весь код :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$owner_array = array();
                    $mask1='изм';
                    $mask2='рев';
                    //Поиск папки изм от файла по маске "вверх"
                    $shifr= $row['shifr'];
                   
                    $t_sql =" SELECT ownerID
                    FROM [Project].[dbo].[files]
                    WHERE fileDescr LIKE $shif%0.% and fileDescr NOT LIKE '%pdf%'
                    GROUP by ownerID";
                    $query =sqlsrv_query($conndev,$t_sql); // выпонляем запрос
 
                        if ($query == FALSE)  echo (sqlsrv_errors());
 
                        while ($row_shifr = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {
                        $ownerID = $row_shifr['ownerID'];
                        $a_sql ="SELECT ownerID, ID, dirName FROM [Project].[dbo].[contents] WHERE ID = $ownerID";
                        $a_query =sqlsrv_query($conndev,$a_sql); // выпонляем запрос
                            if ($query == FALSE)  echo (sqlsrv_errors());
                            while ($a_row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {
                                $pos1 = stripos($a_row['dirName'], $mask1);
                                $pos2 = stripos($a_row['dirName'], $mask2);
                                $a_ownerID = $row_shifr['ownerID'];
                                if(($pos1 === false) and ($pos2 === false)){
                                 $b_sql ="SELECT ownerID, ID, dirName FROM [Project].[dbo].[contents] WHERE ID = $a_ownerID";
                                 $b_query =sqlsrv_query($conndev,$b_sql); // выполняем запрос
                                    while ($b_row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {
                                    $pos1 = stripos($b_row['dirName'], $mask1);
                                    $pos2 = stripos($b_row['dirName'], $mask2);
 
                                    }
                                }
                            }
                        }
                    }
Добавлено через 2 часа 40 минут
Так, разобрался, подскажите знающие , почему функция возвращает старнное значение?
function foo($stroka)
PHP
1
2
3
4
5
{
....
return [$str,$b_ownerID];
....
}
а возвращает тут :
PHP
1
2
3
 [$str1, $b_ownerID]=foo($ownerID);
                            var_dump($str1);
                            var_dump($b_ownerID);
вот такое ?
string(3) "DWG" string(36) "2B32781E-EA7B-4EA3-8CF5-0E7D35B28F75" NULL NULL
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2022, 10:51
Ответы с готовыми решениями:

Как правильно сделать цикл?
Привет всем. Наткнулся на хороший пример вот он...

Как сделать правильно по цикл?
Здравствуйте, имеется код, который удаляет по выбору число из массива: const n=10; var v:array of...

Как сделать пагинацию результатов поиска правильно?
Как сделать пагинацию результатов поиска правильно? По клику на кнопке питон выдает результат...

Как правильно сделать запрос поиска в базе данных?
Здравствуйте. Подскажите пожалуйста, как решить задачу: Есть таблица БД: tbl_post с...

1
4 / 2 / 2
Регистрация: 02.02.2021
Сообщений: 206
05.10.2022, 14:28  [ТС] 2
сделал во так :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function foo($stroka)
{
    include "db_dev.php";
    $b_sql ="SELECT ownerID, ID, dirName FROM [CurProjects].[dbo].[Z_915020R_contents] WHERE ID = '$stroka'";
    $b_query = sqlsrv_query($conndev,$b_sql); // выполяем запрос
    if ($b_query == FALSE)  echo (sqlsrv_errors());
    while ($b_row =sqlsrv_fetch_array($b_query, SQLSRV_FETCH_ASSOC)) {
        $str = $b_row['dirName'];
        $b_ownerID = $b_row['ownerID'];
        return [$str,$b_ownerID];
    }
}
 
 
$mask1='изм';
$mask2='рев';
$t_sql =" SELECT ownerID
          FROM [CurProjects].[dbo].[Z_915020R_files]
          WHERE fileDescr LIKE 'БВНФ0-9150.20-КППГ-000-АД01%0.%' and fileDescr NOT LIKE '%pdf%'
          GROUP by ownerID";
$query =sqlsrv_query($conndev,$t_sql); // выпонляем запрос
if ($query == FALSE)  echo (sqlsrv_errors());
while ($row_shifr = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC)) {
    $ownerID = $row_shifr['ownerID'];
    echo "<br> Ищем изм для :" . $ownerID;
    [$str, $b_ownerID] = foo($ownerID);
    if ($str != NULL) {
        //$pos2 = stripos($str, $mask2);
        while ((stripos($str, $mask1) != true) or (stripos($str, $mask2)!= true)) {
            echo " Изм не найден, ищем в :" . $b_ownerID;
            [$str, $b_ownerID] = foo($b_ownerID);
            if (stripos($str, 'root') == true)
            {
                echo 'Дошли  до конечной папки '.$ownerID;
                break;
            }
        }
    }
}
Но почему то , при совпадении $str, $mask1 - код не возвращает значение $b_ownerID - оно становится NULL , подскажите с чем может связанно?
0
05.10.2022, 14:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2022, 14:28
Помогаю со студенческими работами здесь

Как правильно сделать зависимый выпадающий список в форме поиска по сайту?
Помогите, пожалуйста, разобраться. У меня есть функция поиска во views.py: def search(request):...

Сделать тест через цикл или несколько веток, как правильно?
вот часть теста нажмите на Пройти тест!!! http://f1.kl.com.ua/ задача такая 2, 4, 6, 7, 8 Они...

Обнулить TSearchRec или правильно прервать цикл поиска
Обычная процедура поиска файлов и добавление в список: procedure GetFiles(const dir: string;...

Решил сделать игровой автомат сделал три лейбла и в них запихнул цикл из чисел. Как сделать что бы цикл остано
Решил сделать игровой автомат сделал три лейбла и в них запихнул цикл из чисел. Как сделать что бы...

Цикл: Вычислить значение выражения. Как вывести формулу и сделать цикл while?
Последовательно вводятся N целых чисел. Найти минимальное из них. #include&lt;stdio.h&gt; ...

Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования
Я только начал изучать actionscript и прошу мне помочь. Как правильно дублировать в actionscript...

Как сделать правильно список из списков объектов? Не могу правильно код написать
Нужно импортировать из csv данные о файлов, поместить в список, причем в него нужно помещать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru