За последние 24 часа нас посетили 17525 программистов и 1716 роботов. Сейчас ищут 1823 программиста ...

Переменные в мультизапросе

Тема в разделе "PHP и базы данных", создана пользователем shiyri, 8 июн 2019.

  1. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    Ага вообще круто, добавил еще немного.... как так получилось сам в шоке;)))))

    PHP:
    1. <?php
    2. require_once 'connection.php';
    3.  
    4. // Create connection
    5.  
    6. $conn = mysqli_connect($server, $user, $password, $database);
    7. mysqli_query($conn,"SET CHARACTER SET 'utf8'");
    8. mysqli_query($conn,"SET SESSION collation_connection ='utf8_unicode_ci'");
    9.  
    10.  
    11. // Check connection
    12.  
    13. if (!$conn) {
    14.       die("Connection failed: " . mysqli_connect_error());
    15. }
    16. echo "Connected successfully";
    17. $datey = date('Y-m-d H:i:s');
    18. $datev = date('H:i:s');
    19. $sql ="UPDATE prohod  as pr,
    20. (SELECT id FROM prohod WHERE propusk='0006' ORDER BY id DESC LIMIT 1) as src
    21. SET pr.status = 0, pr.time_vih='".$datev."', pr.date_vih = '".$datey."', pr.time_ar=TIMEDIFF('".$datey."', pr.data) WHERE pr.id = src.id;";
    22.    
    23. if (mysqli_query($conn, $sql)) {
    24.       echo "Update successfully";
    25. } else {
    26.       echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    27. }
    28.  
    29. mysqli_close($conn);
    30.  
    31. ?>
    щас голову ломаю, как соеденить две таблицы, но что б первый столбец состоял строго из значений первой таблицы
    первая таблица

    Код (Text):
    1. SELECT fio FROM fio_table
    вторая таблица

    Код (Text):
    1. SELECT propusk, status, time_vh, time_vih, time_ar FROM prohod WHERE data > SUBDATE(CURDATE(), 2) or status = 1
    --- Добавлено ---
    общее поле propusk
    --- Добавлено ---
    Это надо временные таблицы штудировать?
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    ну у тебя же должна быть связь какая то, между пропуском и человеком.
     
  3. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    в таблице с фио есть пропуск
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    пример показывал уже как их связать:
     
  5. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    слижком много лишнего выходит.
    надо без left
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    а что по твоему left делает? И что делает select?
     
  7. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    left берет за основу одну таблицу и пересение со второй, мне в первом столбце нужна только первая таблица полностью без второй. Из второй таблицы заполняю остальные столбцы
    --- Добавлено ---
    пытаюсь сделать сначала временную таблицу и из нее формировать в php
     
  8. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    покажи ка свою таблицу php, со всеми столбцами, не заполненными.
     
  9. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    Так?
     

    Вложения:

  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    ну и

    select ft.fio, pr.status, pr.time_vh, pr.time_vih, pr.time_ar

    дальше сам додумывай.
     
  11. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    Если делаю через left join то получается

    Код (Text):
    1. select ft.fio, pr.propusk, pr.status, pr.time_vh, pr.time_vih, pr.time_ar from fio_table as ft left join prohod as pr on ft.propusk=pr.propusk
    Петров Пётр Петрович 003 0 NULL 00:00:00 NULL
    Елисеев Климент Сергеевич 0006 0 15:18:37 00:00:00 NULL
    Петров Пётр Петрович 003 0 NULL 00:00:00 NULL
    Елисеев Климент Сергеевич 0006 0 15:28:40 00:00:00 NULL
    Елисеев Климент Сергеевич 0006 0 17:45:18 00:00:00 NULL
    Елисеев Климент Сергеевич 0006 1 13:58:06 09:00:24 NULL
    Елисеев Климент Сергеевич 0006 0 09:45:54 NULL NULL
    Елисеев Климент Сергеевич 0006 0 09:46:30 09:47:13 NULL
    Елисеев Климент Сергеевич 0006 0 09:52:17 09:52:23 00:00:06
    Елисеев Климент Сергеевич 0006 0 10:21:20 10:27:23 00:06:03
    Сидоров Сидор Сидорович NULL NULL NULL NULL NULL
    Хренова Гадя Петрович NULL NULL NULL NULL NULL
    Цветкова Ляля Вячеславовна NULL NULL NULL NULL NULL
    Хохлова Силика Яковлевна NULL NULL NULL NULL NULL
    Герасимова Надежда Михаиловна NULL NULL NULL NULL NULL
    Артемьева Полианна Рудольфовна NULL NULL NULL NULL NULL
    Маслова Эльмира Геласьевна NULL NULL NULL NULL NULL
    Некрасов Эрик Аркадьевич NULL NULL NULL NULL NULL
    Назаров Абрам Владимирович NULL NULL NULL NULL NULL
    Бобров Емельян Макарович NULL NULL NULL NULL NULL
    Князев Михаил Матвеевич NULL NULL NULL NULL NULL
    Дмитриев Денис Валерьевич NULL NULL NULL NULL NULL
    hghfhf NULL NULL NULL NULL NULL
    апвпвапвпа NULL NULL NULL NULL NULL

    пересечение в первом столбце надо убрать

    --- Добавлено ---
    если делаю по последним заходам:

    Код (Text):
    1. select ft.fio, pr.propusk, pr.status, pr.time_vh, pr.time_vih, pr.time_ar from fio_table as ft left join prohod as pr on ft.propusk=pr.propusk where data > SUBDATE(CURDATE(), 2) or status = 1
    то не все фио участвуют

    Елисеев Климент Сергеевич 0006 1 13:58:06 09:00:24 NULL
    Елисеев Климент Сергеевич 0006 0 09:45:54 NULL NULL
    Елисеев Климент Сергеевич 0006 0 09:46:30 09:47:13 NULL
    Елисеев Климент Сергеевич 0006 0 09:52:17 09:52:23 00:00:06
    Елисеев Климент Сергеевич 0006 0 10:21:20 10:27:23 00:06:03
     
  12. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    вытаскивай данные по последнему входу, ты умеешь уже.
     
  13. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    не туда мысль идет...... не все могут входить сегодня, но отображаться должные все.....
    --- Добавлено ---
    надо две тамблицы соеденить причем первый столбец только фио перечиляет, а с другой таблицы только заполнение остальных стобцов
     
  14. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Просто подумай. Если сегодня голова не варит, делай на другой день =)
     
  15. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    Код (Text):
    1. select pr.data, pr.propusk, pr.status, pr.time_vh, pr.time_vih, pr.time_ar, pr.date_vih, ft.fio from fio_table as ft left join prohod as pr on ft.propusk=pr.propusk where data > SUBDATE(CURDATE(), 2) or status = 1
    2019-06-09 00:00:00 0006 1 13:58:06 09:00:24 NULL 2019-06-11 00:00:00 Елисеев Климент Сергеевич
    2019-06-11 00:00:00 0006 0 09:45:54 NULL NULL NULL Елисеев Климент Сергеевич
    2019-06-11 00:00:00 0006 0 09:46:30 09:47:13 NULL 2019-06-11 00:00:00 Елисеев Климент Сергеевич
    2019-06-11 00:00:00 0006 0 09:52:17 09:52:23 00:00:06 2019-06-11 00:00:00 Елисеев Климент Сергеевич
    2019-06-11 10:21:20 0006 0 10:21:20 10:27:23 00:06:03 2019-06-11 10:27:23 Елисеев Климент Сергеевич
    --- Добавлено ---
    так?
     
  16. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    а тебе это было нужно ?)
     
  17. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    Код (Text):
    1.  
    2. select status, time_vh, time_vih, time_ar, data, date_vih from prohod where data > CURDATE() or status = 1
    Из prohod выбрал нужное. тк на базе есть охрана она уходит на след утро и должна выходить.

    status time_vh time_vih time_ar data date_vih
    1 09:45:54 NULL NULL 2019-06-11 00:00:00 NULL
    1 16:28:23 NULL NULL 2019-06-12 16:28:23 NULL
     
  18. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    Код (Text):
    1. CREATE TEMPORARY TABLE `temp_table` (
    2.     `id` INT NOT NULL AUTO_INCREMENT,
    3.     `fio` VARCHAR(255),
    4.     `propusk` VARCHAR(255),
    5.     `status` VARCHAR(255),
    6.     `time_vh` VARCHAR(255),
    7.     `time_vih` VARCHAR(255),
    8.     `time_ar` VARCHAR(255),
    9. PRIMARY KEY (`id`)
    10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    11. INSERT INTO sotr.temp_table (fio, propusk)
    12. SELECT fio, propusk
    13. FROM sotr.fio_table;
    14. SELECT * from temp_table
    Сделал временную таблицу со всеми полями, как щас вторую таблицу запихать?

    id fio propusk status time_vh time_vih time_ar
    1 Петров Пётр Петрович 003 NULL NULL NULL NULL
    2 Сидоров Сидор Сидорович 005 NULL NULL NULL NULL
    3 Хренова Гадя Петрович 000000 NULL NULL NULL NULL
    4 Цветкова Ляля Вячеславовна 0001 NULL NULL NULL NULL
    5 Хохлова Силика Яковлевна 0002 NULL NULL NULL NULL
    6 Герасимова Надежда Михаиловна 0003 NULL NULL NULL NULL
    7 Артемьева Полианна Рудольфовна 0004 NULL NULL NULL NULL
    8 Маслова Эльмира Геласьевна 0005 NULL NULL NULL NULL
    9 Елисеев Климент Сергеевич 0006 NULL NULL NULL NULL
    10 Некрасов Эрик Аркадьевич 0007 NULL NULL NULL NULL
    11 Назаров Абрам Владимирович 0008 NULL NULL NULL NULL
    12 Бобров Емельян Макарович 0009 NULL NULL NULL NULL
    13 Князев Михаил Матвеевич 0010 NULL NULL NULL NULL
    14 Дмитриев Денис Валерьевич 1000000 NULL NULL NULL NULL
    15 hghfhf 5354345 NULL NULL NULL NULL
    16 апвпвапвпа 3456546 NULL NULL NULL NULL
    --- Добавлено ---
    Код (Text):
    1. CREATE TEMPORARY TABLE `temp_table` (
    2.     `id` INT NOT NULL AUTO_INCREMENT,
    3.     `fio` VARCHAR(255),
    4.     `propusk` VARCHAR(255),
    5.     `status` VARCHAR(255),
    6.     `time_vh` VARCHAR(255),
    7.     `time_vih` VARCHAR(255),
    8.     `time_ar` VARCHAR(255),
    9. PRIMARY KEY (`id`)
    10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    11. INSERT INTO sotr.temp_table (fio, propusk)
    12. SELECT fio, propusk
    13. FROM sotr.fio_table;
    14. INSERT INTO sotr.temp_table (status, time_vh, time_vih, time_ar)
    15. select propusk, status, time_vh, time_vih, time_ar
    16. from prohod
    17. where data > CURDATE() or status = 1;
    18. SELECT * from temp_table;
    добавляет данные в конец талицы, как сделать что б добавляла в те же строки по propusk
     
  19. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    АВЕ САЛАТ-ЦЕЗАРЬ

    :))))))))

    Код (Text):
    1. CREATE TEMPORARY TABLE `temp_table` (
    2.     `id` INT NOT NULL AUTO_INCREMENT,
    3.     `propusk` VARCHAR(255),
    4.     `status` VARCHAR(255),
    5.     `time_vh` VARCHAR(255),
    6.     `time_vih` VARCHAR(255),
    7.     `time_ar` VARCHAR(255),
    8. PRIMARY KEY (`id`)
    9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    10. INSERT INTO sotr.temp_table (propusk, status, time_vh, time_vih, time_ar)
    11. select propusk, status, time_vh, time_vih, time_ar
    12. from prohod
    13. where data > CURDATE() or status = 1;
    14. SELECT * FROM fio_table LEFT OUTER JOIN temp_table ON fio_table.propusk = temp_table.propusk ORDER BY fio;
     
  20. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    PHP:
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    2. <html>
    3. <head>
    4.   <meta  http-equiv="refresh" content="5"; charset="utf-8">
    5.   <title>Проходная</title>
    6.  
    7. </head>
    8. <?php include('head.php');?>
    9.     <tr>
    10.   <td colspan="2"><font size="5"><center>ФИО</td>
    11.   <td width="50"><font size="5"><center>Статус</td>
    12.   <td width="130"><font size="5"><center>Время входа</td>
    13.   <td width="150"><font size="5"><center>Время выхода</td>
    14.   <td width="200"><font size="5"><center>Время пребывания</td>
    15.   </tr>
    16.   <?php
    17. require_once 'connection.php'; // подключаем скрипт
    18. $link = mysqli_connect($host, $user, $password, $database)
    19.     or die("Ошибка " . mysqli_error($link));
    20.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    21. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    22. $query ="CREATE TEMPORARY TABLE `temp_table` (
    23.    `id` INT NOT NULL AUTO_INCREMENT,
    24.    `propusk` VARCHAR(255),
    25.    `status` VARCHAR(255),
    26.    `time_vh` VARCHAR(255),
    27.    `time_vih` VARCHAR(255),
    28.    `time_ar` VARCHAR(255),
    29. PRIMARY KEY (`id`)
    30. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    31. INSERT INTO sotr.temp_table (propusk, status, time_vh, time_vih, time_ar)
    32. select propusk, status, time_vh, time_vih, time_ar
    33. from prohod
    34. where data > CURDATE() or status = 1;
    35. SELECT ft.fio, temp_table.status, temp_table.time_vh, temp_table.time_vih, temp_table.time_ar FROM fio_table as ft LEFT OUTER JOIN temp_table ON ft.propusk = temp_table.propusk ORDER BY fio;";
    36. $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    37. if($result)
    38. {
    39.     $rows = mysqli_num_rows($result); // количество полученных строк
    40.  
    41.     echo "";
    42.     for ($i = 0 ; $i < $rows ; ++$i)
    43.     {
    44.         $row = mysqli_fetch_row($result);
    45.         echo "<tr>";
    46.             for ($j = 0 ; $j < 5 ; ++$j) echo "<td colspan=2><font size=5>$row[$j]</td ><td></td>";
    47.         echo "</tr>";
    48.     }
    49.     echo "";
    50.  
    51.     // очищаем результат
    52.     mysqli_free_result($result);
    53. }
    54. mysqli_close($link);
    55. ?>
    56. </table>
    57. </body>
    58. </html>
    Хелп
    где ошибка не вижу, mysql говорит в строке с insert into
    в myphpadmin запрос проходит без сучка.....

    Ошибка You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO sotr.temp_table (propusk, status, time_vh, time_vih, time_ar) selec' at line 10
     
  21. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    У тебя там 2 запроса
     
  22. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    как тогда?

    PHP:
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    2. <html>
    3. <head>
    4.   <meta  http-equiv="refresh" content="5"; charset="utf-8">
    5.   <title>Проходная</title>
    6.  
    7. </head>
    8. <?php include('head.php');?>
    9.     <tr>
    10.   <td colspan="2"><font size="5"><center>ФИО</td>
    11.   <td width="50"><font size="5"><center>Статус</td>
    12.   <td width="130"><font size="5"><center>Время входа</td>
    13.   <td width="150"><font size="5"><center>Время выхода</td>
    14.   <td width="200"><font size="5"><center>Время пребывания</td>
    15.   </tr>
    16.   <?php
    17. require_once 'connection.php'; // подключаем скрипт
    18. $link = mysqli_connect($host, $user, $password, $database)
    19.     or die("Ошибка " . mysqli_error($link));
    20.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    21. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    22. $query ="CREATE TEMPORARY TABLE `temp_table` (
    23.    `id` INT NOT NULL AUTO_INCREMENT,
    24.    `propusk` VARCHAR(255),
    25.    `status` VARCHAR(255),
    26.    `time_vh` VARCHAR(255),
    27.    `time_vih` VARCHAR(255),
    28.    `time_ar` VARCHAR(255),
    29. PRIMARY KEY (`id`)
    30. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
    31. $query. ="INSERT INTO temp_table
    32. (propusk, status, time_vh, time_vih, time_ar)
    33. select propusk, status, time_vh, time_vih, time_ar
    34. from prohod
    35. where data > CURDATE() or status = 1;
    36. SELECT ft.fio, temp_table.status, temp_table.time_vh, temp_table.time_vih, temp_table.time_ar FROM fio_table as ft LEFT OUTER JOIN temp_table ON ft.propusk = temp_table.propusk ORDER BY fio;";
    37. $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    38. if($result)
    39. {
    40.     $rows = mysqli_num_rows($result); // количество полученных строк
    41.    
    42.     echo "";
    43.     for ($i = 0 ; $i < $rows ; ++$i)
    44.     {
    45.         $row = mysqli_fetch_row($result);
    46.         echo "<tr>";
    47.             for ($j = 0 ; $j < 5 ; ++$j) echo "<td colspan=2><font size=5>$row[$j]</td ><td></td>";
    48.         echo "</tr>";
    49.     }
    50.     echo "";
    51.    
    52.     // очищаем результат
    53.     mysqli_free_result($result);
    54. }
    55. mysqli_close($link);
    56. ?>
    57. </table>
    58. </body>
    59. </html>
    как их разделить?
     
  23. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Просто уж напишу. Тебе всего то надо было, сделать фильтр в таблице prohod. Где ты вытягивал бы последние данные входа конкретного человека. То есть одну строку на конкретного человека, если такого не было, результат был бы null. И привязать этот запрос с таблицей fio. Все. А ты тут нагородил, я даже лезть не хочу уже.
     
  24. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Наконец та)) такие темы надо вычленять с первого поста.
    Объяснять что-либо человеку не имеющему элементарной базовой подготовки - себе дороже.
     
  25. shiyri

    shiyri Активный пользователь

    С нами с:
    8 июн 2019
    Сообщения:
    112
    Симпатии:
    0
    я ж учусь:)