Forum Webscript.Ru

Программирование => PHP => Тема начата: Mrak от 21 Марта 2006, 13:20:19

Название: Insert с исключением
Отправлено: Mrak от 21 Марта 2006, 13:20:19
Вопрос таков.
ДБ Mysql 3.23.58
Имеется исходная "raw" таблица с номерами телефонов 68 столбцов.
Имеется таблица с номерами конференционных телефонов, 2 столбца.
id, conf.

Цель создать таблицу, где будут исключены номера конференционных телефонов.


$query_raw = "SELECT globalCallID_callId, callingPartyNumber, originalCalledPartyNumber, lastRedirectDn, dateTimeConnect, dateTimeDisconnect, duration, origDeviceName FROM cdr_log_raw ORDER BY globalCallID_callId";
$result_raw = mysql_query($query_raw);
while ($row_raw = mysql_fetch_array($result_raw))
{
   
   if($row_raw[0] > "0" && $row_raw[6] > "0" && $row_raw[7] != "\\"ccm-voice\\"")
   {
   $row_raw[0] = eregi_replace(\'"\', \'\', $row_raw[0]); //globalCallID_callId - порядковый номер звонка
   $row_raw[1] = eregi_replace(\'"\', \'\', $row_raw[1]); //callingPartyNumber - Номер А
   $row_raw[2] = eregi_replace(\'"\', \'\', $row_raw[2]); //originalCalledPartyNumber - Номер В
   $row_raw[3] = eregi_replace(\'"\', \'\', $row_raw[3]); //lastRedirectDn - Последняя переадресация
   $row_raw[4] = eregi_replace(\'"\', \'\', $row_raw[4]); //dateTimeConnect - Начало разговора
   $row_raw[5] = eregi_replace(\'"\', \'\', $row_raw[5]); //dateTimeDisconnect - Окончание разговора
   $row_raw[6] = eregi_replace(\'"\', \'\', $row_raw[6]); //duration - Длительность разговора
   $row_raw[7] = eregi_replace(\'"\', \'\', $row_raw[7]); //origDeviceName - MAC адрес клиента
   $row_raw[7] = eregi_replace(\'SEP\', \'\', $row_raw[7]); //origDeviceName - MAC адрес клиента

      if ($row_raw[3] != 1111 && $row_raw[3] != 2222 && $row_raw[3] != 3333 && $row_raw[3] != 4444 && $row_raw[3] != 5555) //НОМЕРА КОНФЕРЕНЦИЙ!!!
      {
         $query_agr="INSERT IGNORE INTO cdr_log_agr VALUES (\'\', \'".$row_raw[0]."\', \'".$row_raw[1]."\', \'".$row_raw[2]."\', \'".$row_raw[3]."\', \'".$row_raw[4]."\', \'".$row_raw[5]."\', \'".$row_raw[6]."\', \'".$row_raw[7]."\', \'0\')";
         $result_agr=mysql_query($query_agr) or die ("not insert")."\\n";
      }
   }
}

Этот код рабочий. Тут конференционные номера железно прибиты. Но при увеличении количества номеров придётся переписывать файл.

Подскажите плиз в каком направлении двигатся? Как исключать конференционные номера при вставке в таблицу?
Название: Insert с исключением
Отправлено: Mrak от 21 Марта 2006, 13:25:37
Есть ещё вариант, это заливка данных в базу без изменений и удаление циклом ненужных номеров.
Но боюсь, что при большом количестве записей сервер будет тормозить.
Название: Insert с исключением
Отправлено: andymc от 22 Марта 2006, 19:47:25
Не, слишком сложно всё, даже пытаться не буду.
Название: Insert с исключением
Отправлено: reLax[0x00] от 23 Марта 2006, 20:58:52
Я знаю ответ - MySQL правда не очень хорошо знаю-но ты ограничишься всего 2-умя запросами к БД (2-умя потому что плохо SQL знаю-может можно и одним сделать все - пока выборкой одним запросом из 2-ух таблиц, чтобы из одной выбрать все и по ее значениям и применить эти значения с WHERE ко второй:) - пока не додумался). и никакие тут лишние циклы на PHP не нужны...так же как и лишняя БД без конференциями-тебе она точно отдельно нужна или всетаки лучше отфильтровать из тех двух чтобы был результат ? В субботу ориентировачно скажу как :) Щас не до этого - работа млин :(
Название: Insert с исключением
Отправлено: for_i_0 от 23 Марта 2006, 22:44:31
Mrak

1. INSERT ... SELECT Syntax (http://dev.mysql.com/doc/refman/4.1/en/insert-select.html)

2. По поводу конференц номеров:
a)ИМХО можно прописать как есть в условии WHERE && - ами

б)можно задействовать, регулярные выражения (http://dev.mysql.com/doc/refman/4.1/en/regexp.html) в условии WHERE или при SELECT- е в IF(col = regexp, false, true).
Название: Insert с исключением
Отправлено: Mrak от 31 Марта 2006, 13:02:06
Спасибо.