За последние 24 часа нас посетили 87292 программиста и 4639 роботов. Сейчас ищут 2040 программистов ...

Привязка данных из одной таблицы к другой

Тема в разделе "PHP для новичков", создана пользователем nkjast, 8 авг 2018.

  1. nkjast

    nkjast Новичок

    С нами с:
    8 авг 2018
    Сообщения:
    6
    Симпатии:
    0
    Всем привет, нужно привязать GroupName к каждому счетчику. не могу разобраться вроде и мануалы про запросы прочитал и всё равно никак.
    имеется запрос
    Код (Text):
    1. $sqlquery = "
    2.   SELECT [dm_Devices].[LogId]
    3.       ,[cp_Data].[Time]
    4.       ,[cp_Data].[Value]
    5.       ,[RW_ReceivedData].[NormValue]
    6.       ,[ObjectGroups].[GroupName]
    7.   FROM  [ADDAXDB_APPSERVER].[dbo].[cp_Data],
    8.         [ADDAXDB_APPSERVER].[dbo].[dm_Devices],
    9.         [ADDAXDB_APPSERVER].[dbo].[ObjectGroups],
    10.         [ADDAXDB_APPSERVER].[dbo].[RW_ReceivedData]
    11.   WHERE [cp_Data].[Time] >= ?
    12.       and [cp_Data].[Time] <= ?
    13.       and [RW_ReceivedData].[Time] = [cp_Data].[Time]
    14.       and [cp_Data].[LogicalName] = 0x01000F0800FF
    15.       and [RW_ReceivedData].[LogicalName] = [cp_Data].[LogicalName]
    16.       and [cp_Data].[DeviceId] = [dm_Devices].[Id]
    17.       and [RW_ReceivedData].[DeviceId] = [dm_Devices].[Id]
    18.       and [dm_Devices].[SerialNo] = ?
    19. ";
    20.                 $params = array(date_format(date_create($_POST['datefr'] . " 00:00:00"), 'Ymd'),
    21.                         date_format(date_create($_POST['dateto'] . " 23:59:00"), 'Ymd H:i:s'), $serialNumber);
    22.                 $query = sqlsrv_query($conn, $sqlquery, $params);
    23.                      
    24.                    
    25.                 if (sqlsrv_has_rows($query) === false){
    26.                     echo "<BR> В данном промежутке времени отстутствуют показания. <BR>";
    27.                     exit();
    28.                 }
    Сам вывод
    Код (Text):
    1. <div class="deviceInfo">
    2.                   <br>
    3.                   <center><table border='1'><tr><th>ID счётчика</th><th>Время</th><th>Коэффициент </th><th>Показания счётчика</th></tr></center>
    4.              
    5. <!-- ######################################################################################################################################################################## -->
    6.                   <?php
    7.                   $sum_no_trans = 0;
    8.                   $i = 0;
    9.                   $lastsum_no_trans = 0;
    10.                     while( $row = sqlsrv_fetch_array( $query, SQLSRV_FETCH_ASSOC) ) {
    11.                         if ($row['NormValue'] <> 356 && (empty($_POST['chk_daily']) || (date_format($row['Time'], 'H') == 0 && date_format($row['Time'], 'i') == 0)) && $row['Value'] <> 0){
    12.                             echo "<tr><td>", $row['LogId'], "</td><td>",
    13.                         date_format($row['Time'], 'H:i d-m-y'), "</td><td>", sprintf("%u", $row['Value']/$row['NormValue']), "</td><td>", sprintf("%.2f ", $row['NormValue']/1000), "</td>", sprintf("%s", $row['GroupName']), "</td></tr>";
    14.                             if (!$i)
    15.                             {
    16.                                 $sum_no_trans = -$row['NormValue'];
    17.                             }                      
    18.                             $lastsum_no_trans = $row['NormValue'];
    19.                             $i++;                      
    20.                         }
    21.                     }
    22.                     $sum_no_trans += $lastsum_no_trans;
    23.                     echo "<td colspan='2'>Всего за период:</td><td>", sprintf("%.2f"), "</td><td>", sprintf("%.2f", $sum_no_trans/1000), "</td></tr>";
    24.                   ?>
    25. <!-- ######################################################################################################################################################################## -->
    26.                   </table>
    27.                 </div>
    Текст расположен в [ObjectGroups].[GroupName]
    как можно привязать GroupName к нужному счетчику, непосредственно вязать к одному из ключа остальных таблиц? с помощью WHERE?
    Можно пример допустим если в таблице objectGroups есть айди соответствующий [dm_Devices].[Id].как организовать связь
     
    #1 nkjast, 8 авг 2018
    Последнее редактирование: 8 авг 2018
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    JOIN
    ..... left join, right join, inner join
    в вашем случае left join, но потом группировку не забыть
     
  3. nkjast

    nkjast Новичок

    С нами с:
    8 авг 2018
    Сообщения:
    6
    Симпатии:
    0
    в начальном посте всё описано сумбурно, попытаюсь объяснить ещё раз а также описать все ньюансы, пожалуйста помогите
    есть программа и сайт, в программе нормально отображаются данные об определенном устройстве, когда появилось желание вывести на сайт таким же столкнулся с проблемой, все данные находятся в разных таблицах, к примеру айди устройства и его описание, не в одной базе где занесена данная информация нету ключевых значений по которым бы можно было сравнить и вывести на сайт
    Попробую привести пример, есть бд с именами и фамилиями

    dbo.names
    Имя | ID
    Петруха | 3
    Антоха | 19
    Serg | 4

    dbo.familia
    Фамилия | возраст
    Сергеев | 22
    Алёшин | 19
    Иванов | 34

    Эти данные хаотично разложены к примеру Фамилия Сергеев соответствует имени Антоха, чтобы выложить их на сайт с помощью запроса нужен ключ в базе фамилия к примеру ID,так вот я перерыл все таблицы и не нашёл не в одной подходящего ключа по которому возможно было бы их объединить и вывести в соответствии друг другу. НО! в программе которая привязана к этой базе выводятся данные уже привязанными как нужно, каким образом это возможно?
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @nkjast, возможно, всё-таки есть ещё таблица, в которой есть id из таблицы names и id (или фамилия) из таблицы familia
    Ещё наводящий вопрос: в "той программе" каким образом вносится информация о новом человеке?
     
  5. nkjast

    nkjast Новичок

    С нами с:
    8 авг 2018
    Сообщения:
    6
    Симпатии:
    0
    также с помощью запроса в бд
     
  6. nkjast

    nkjast Новичок

    С нами с:
    8 авг 2018
    Сообщения:
    6
    Симпатии:
    0
    удалось отыскать,сейчас не могу разобраться с вопросом как сделать запрос на вывод одного из элементов таблицы
    к примеру: отыскать id взятый методом $_GET['id']; в таблице и при первом совпадении извлечь значение имени из этой строки где был найден схожий айди
     
  7. nkjast

    nkjast Новичок

    С нами с:
    8 авг 2018
    Сообщения:
    6
    Симпатии:
    0
    ребят помогите
     
  8. nkjast

    nkjast Новичок

    С нами с:
    8 авг 2018
    Сообщения:
    6
    Симпатии:
    0
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    В этом поможет совет из сообщения №2.