Запрос для одного значения в нескольких таблицах MSSQL последовательно в PHP

#php #sql #sql-server #for-loop #while-loop

#php #sql #sql-сервер #for-цикл #цикл while

Вопрос:

У меня есть 2 таблицы, которые мне нужно запросить для получения одного результата, но если он найден в $ table0, мне нужно прекратить поиск и использовать значения в этой строке. Что-то вроде этого:

 $p1_sql = "SELECT TOP 1 * FROM '$table0' WHERE phone1 = '$cidnumber'";
$p2_sql = "SELECT TOP 1 * FROM '$table0' WHERE phone2 = '$cidnumber'";
$c1_sql = "SELECT TOP 1 * FROM '$table1' WHERE contactphone = '$cidnumber'";
$c2_sql = "SELECT TOP 1 * FROM '$table1' WHERE contactphone2 = '$cidnumber'";
$c3_sql = "SELECT TOP 1 * FROM '$table1' WHERE contactphone3 = '$cidnumber'";
$c4_sql = "SELECT TOP 1 * FROM '$table1' WHERE contactphone4 = '$cidnumber'";

$p1_res = mssql_query($p1_sql);
$p1_row = mssql_num_rows($p1_res);

$p2_res = mssql_query($p2_sql);
$p2_row = mssql_num_rows($p2_row);

$c1_res = mssql_query($c1_sql);
$c1_row = mssql_num_rows($c1_res);

$c2_res = mssql_query($c2_sql);
$c2_row = mssql_num_rows($c2_res);

$c3_res = mssql_query($c3_sql);
$c3_row = mssql_num_rows($c3_res);

$c4_res = mssql_query($c4_sql);
$c4_row = mssql_num_rows($c4_res);

if ($p1_row = 1){
    $p1_res = $newres;
    goto okres;
} elseif ($p2_row = 1) {
    $p2_res = $newres;
    goto okres;
} elseif ($c1_row = 1) {
    $c1_res = $newres;
    goto okres;
} elseif ($c2_row = 1) {
    $c2_res = $newres;
    goto okres;
} elseif ($c3_row = 1) {
    $c3_res = $newres;
    goto okres;
} elseif ($c4_row = 1) {
    $c4_res = $newres;
    goto okres;
} else {
    $newres = "na";
    goto nares;
}

okres:
$cid_sel = mssql_query("SELECT TOP 1 * FROM '$table0' WHERE phone1 = '$cidnumber'");
  

Это, однако, некрасиво и не работает. Я пытался использовать ‘для каждого …’ или ‘пока (что-то)’, но не мог понять, как это будет работать. Я даже не знаю, будет ли это. Каков наилучший способ сделать это? Это мой первый опыт в чем-то подобном, и любая помощь приветствуется.

Ответ №1:

Нет необходимости выполнять так много отдельных запросов. Знакомы ли вы с базовым SQL в том, что касается объединений? Если нет, вам следует прочитать о них — то, что вы хотите здесь, кажется достижимым с помощью одного запроса.

Комментарии:

1. Я думал о том, чтобы объединить ВСЕ, но разве тогда это не был бы просто один большой запрос? Что я получаю? Я думаю, что я действительно хочу сделать, это запустить каждую из них за раз и проверить, произошел ли результат, и если да, то остановить. Поставить IF между каждой? Могу ли я запустить оператор IF внутри запроса?

2.Или SELECT CASE WHEN phone1 = $cidnumber THEN ??? ELSE CASE WHEN phone2 = $cidnumber THEN ??? ELSE ... сработало бы что-то подобное?

3. @lorsungcu — На самом деле вы не можете поместить оператор IF в запрос (ну, вы можете, но не для того, чтобы делать то, что вы хотите сделать здесь). Если запрос ОБЪЕДИНЕНИЯ у вас не работает, возможно, было бы лучше написать хранимую процедуру, в которой вы действительно могли бы иметь тип IF … ЗАТЕМ логика, которую вы хотите.

4. То, что вы получаете от одного запроса, — это более простой / качественный код, включающий один результат для обработки вместо многих. Многие запросы также имеют проблему, заключающуюся в том, что один из них может завершиться ошибкой на этом пути..

Ответ №2:

Я бы добавил разные запросы в массив и зациклил (используя foreach) этот массив для последующего запроса к базе данных. Как только вы найдете то, что ищете, вы выходите из цикла, используя команду break; .

Использование объединений в чистом sql также может быть решением, но я не совсем уверен, чего вы хотите здесь достичь.

Удачи!

Комментарии:

1. Вроде того. В любом случае, я думаю, что это привело меня в правильном направлении. Спасибо!