Массив из файла в другой массив через sql

nahimig

Новичок
Добрый день, уважаемые.
Пытался осилить, но так и нет результата.
Сам код:

Код:
// Определение даты сегодня и 2 дня назад
$datetime = date("d.m.Y"); // Сегодняшняя дата
$datetime2 = date('d.m.Y', strtotime("$datetime -2 day"));

//скуль запрос, где переменная $device должна каждый раз браться из массива файла devices.txt
$rs=odbc_exec($conn,"
SELECT
    s.UN AS 'Страна',
    a.UN AS 'Адрес',
    d.UN AS 'Дом',
    CONVERT(nvarchar(10),m.Time, 104) AS 'Дата',
    d.device AS 'Номер устройства',
FROM
    *
WHERE d.device = '$device' AND m.Time <=  '$datetime' AND m.Time > '$datetime2'");

$devices=file('device.txt');
/*
содержание данного файла:
293842
910283
289384
293742
и т.д. - может быть до 200 шт.
*/

$rows = array();
while(odbc_fetch_row($rs)) {
    $rows[] = array(
        'Страна' => odbc_result($rs, 'Страна'),
        'Адрес' => odbc_result($rs, 'Адрес'),
        'Дом' => odbc_result($rs, 'Дом'),
        'Номер устройства' => odbc_result($rs, 'Номер устройства'),
        'Дата' => odbc_result($rs, 'Дата'),
    );
}
foreach( $rows as $row ) {
    if( $row['Дата'] == null ) {
        echo '<div class="device-error">Устройство не ответило за последние 2 дня</div>';
        echo "NO DATA<br />";
    } else {
        echo '<div class="device-success">Устройство ответило:</div>';
        echo $row['Страна']."<br />";
        echo $row['Адрес']."<br />";
        echo $row['Дом']."<br />";
        echo $row['Дата']."<br />";
        echo $row['Номер устройства'];
        }
}

Необходимо каждый элемент массива файла device.txt прогнать по $rs и на экране отобразить результаты для каждого из них по форме foreach($rows as $row): отвечает ли устройство или нет за последние 2 дня, если отвечает, то показать инфу о нем.

Намекните хотя бы куда копать :( отдохнуть пробовал, с новыми силами не вышло :)

p.s.
начинающий... но с диким желанием изучать.
 

WMix

герр M:)ller
Партнер клуба
Странный способ работы с базой (через одбц) первый раз вижу select from * тут без пол литра не разберешься. А база то какая?
 

nahimig

Новичок
Да, это не совсем опечатка... просто я не думал, что оно нужно вам будет. я поэтому не стал писать. Выборка работает, берет то, что нужно. У меня не выходит из массива devices.txt брать каждый элемент и запихивать в переменную $device в sql запросе. После чего получать массив из данных в виде Страна - Город - Дом - Дата - Номер устройства.
Можно не обращать внимания на FROM, я думаю...
Код:
    RW_ReceivedData r LEFT OUTER JOIN
    RW_ReceivedData AS T_O ON r.DeviceId = T_O.DeviceId AND T_O.LogicalName = 0x01000F0800FF AND r.Time = T_O.Time LEFT OUTER JOIN
    dm_Devices AS d ON r.DeviceId = d.Id LEFT OUTER JOIN
    cp_ControlPoints AS c ON d.Id = c.DevId LEFT OUTER JOIN
    Unit AS k ON c.GAID = k.UnitID LEFT OUTER JOIN
    Unit AS u ON k.ParentID = u.UnitID INNER JOIN
    Unit AS g ON u.ParentID = g.UnitID
А база MS SQL. Наверное поэтому odbc.
 

WMix

герр M:)ller
Партнер клуба
Сделать судя по всему foreach ($devices as $device)
и каждый элемент $device прогонять по sql запросу, результат каждого элемента показывать на экран.
Как-то так...
согласен, можно и так, а можно еще IN в SQL использовать и "прогонять" на каждую итерацию не "по sql запросу" а по массиву.
 

nahimig

Новичок
Уф, тыкните мне пожалуйста, что исправить... вот целый код:
Код:
$devices = file('device.txt');
foreach ($devices as $device) {
    while(odbc_fetch_row($rs)) {
        $rows[] = array(
            'Адрес' => odbc_result($rs, 'Адрес'),
            'Дата' => odbc_result($rs, 'Дата'),
            'Номер счетчика'=> odbc_result($rs, 'Номер счетчика'),
        );
    }
    foreach( $rows as $row ) {
        if( $row['Дата'] == null ) {
            echo '<div class="device-error">Не рабочий счетчик</div>';
            echo "NO DATA<br />";
        } else {
            echo '<div class="device-success">Рабочий счетчик</div>';
            echo $row['Адрес'].", ".$row['Дом']."<br />";
            echo $row['Номер счетчика']."<br />";
        }
    }
}
это получается при условии SQL=
Код:
WHERE d.SerialNo = '2681559'
Мне необходимо вместо цифр d.SerialNo вставлять каждую переменную из $devices = file('device.txt');
не выходит... вроде отображает, если оставляю цифры и только по этим цифрам результат, иначе ->
Код:
Warning: Invalid argument supplied for foreach() in
Если делаю
$device = '123456789';
и sql:
WHERE d.SerialNo = '$device'
то все ОК... А как перебор массива из файла прогонять? :'(
 
Последнее редактирование:
Сверху