За последние 24 часа нас посетили 22059 программистов и 1104 робота. Сейчас ищут 713 программистов ...

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

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

  1. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Подскажите пожалуйста!
    Есть мультизапрос в итоге должно быть 2 переменных fio, time_vh, как их получить?
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta   charset="utf-8">
    5. </head>
    6. <body>
    7. <?php
    8. require_once 'connection.php'; // подключаем скрипт
    9. $link = mysqli_connect($host, $user, $password, $database)
    10.     or die("Ошибка " . mysqli_error($link));
    11.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    12. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    13. $sql ="SELECT fio FROM fio_table WHERE propusk = (SELECT propusk FROM prohod ORDER BY propusk DESC LIMIT 1)";
    14. $sql.="SELECT time_vh FROM prohod ORDER BY propusk DESC LIMIT 1";
    15.  
    16.  
    17. if (!$mysqli->multi_query($sql)) {
    18.     echo "Не удалось выполнить мультизапрос: (" . $mysqli->errno . ") " . $mysqli->error;
    19. }
    20.  
    21. do {
    22.     if ($res = $mysqli->store_result()) {
    23.         var_dump($res->fetch_all(MYSQLI_ASSOC));
    24.         $res->free();
    25.     }
    26. } while ($mysqli->more_results() && $mysqli->next_result());
    27. mysqli_close($link);
    28. ?>
    29. </body>
    30. </html>
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. select ft.fio , pr.time_vh
    2. from prohod as pr
    3. left join fio_table as ft on pr.propusk = ft.propusk
    4. order by pr.propusk desc
     
  3. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Первый раз с mysql. Подскажите пожалуйста, как их в таблицу вставить?
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta   charset="utf-8">
    5. </head>
    6. <body>
    7. <?php
    8. require_once 'connection.php'; // подключаем скрипт
    9. $link = mysqli_connect($host, $user, $password, $database)
    10.     or die("Ошибка " . mysqli_error($link));
    11.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    12. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    13. $sql ="select ft.fio , pr.time_vh from prohod as pr left join fio_table as ft on pr.propusk = ft.propusk order by pr.propusk desc";
    14.  
    15.  
    16. echo "<table>\n";
    17. echo "<tr><th>Здравствуйте</th></tr>\n";
    18. echo "<tr><th>$ft.fio</th></tr>\n";
    19. echo "<tr><th>Время входа:</th></tr>\n";
    20. echo "<tr><th>$pr.time_vh</th></tr>\n";
    21. echo "</table>\n";
    22.  
    23.  
    24.  
    25. mysqli_close($link);
    26. ?>
    27. </body>
    28. </html>
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  5. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Не совсем понимаю конструкцию.
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta   charset="utf-8">
    5. </head>
    6. <body>
    7. <?php
    8. require_once 'connection.php'; // подключаем скрипт
    9. $link = mysqli_connect($host, $user, $password, $database)
    10.     or die("Ошибка " . mysqli_error($link));
    11.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    12. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    13. $query ="select ft.fio , pr.time_vh from prohod as pr left join fio_table as ft on pr.propusk = ft.propusk order by pr.propusk desc";
    14.  
    15. if ($result = $mysqli->query($query)) {
    16.  
    17.     /* извлечение ассоциативного массива */
    18.     while ($row = $result->fetch_assoc()) {
    19.         printf ("%s (%s)\n", $row["fio"], $row["time_vh"]);
    20.         echo "<table>\n";
    21. echo "<tr><th>Здравствуйте</th></tr>\n";
    22. echo "<tr><th>$row[$fio]</th></tr>\n";
    23. echo "<tr><th>Время входа:</th></tr>\n";
    24. echo "<tr><th>$row[time_vh]</th></tr>\n";
    25. echo "</table>\n";
    26.     }
    27.  
    28.     /* удаление выборки */
    29.     $result->free();
    30. }
    31.  
    32.  
    33.  
    34.  
    35.  
    36. mysqli_close($link);
    37. ?>
    38. </body>
    39. </html>
     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    значит вы не понимаете php, а не sql
     
  7. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Вот так ничего не выходит. Ни ошибки, ни выполненного запроса.
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta  http-equiv="refresh" content="5"; charset="utf-8">
    5. </head>
    6. <body>
    7. <?php
    8. require_once 'connection.php'; // подключаем скрипт
    9. $link = mysqli_connect($host, $user, $password, $database)
    10.     or die("Ошибка " . mysqli_error($link));
    11.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    12. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    13. $query ="SELECT ft.fio , pr.time_vh from prohod as pr left join fio_table as ft on pr.propusk = ft.propusk order by pr.propusk desc";
    14.  
    15. // Выполняем запрос
    16. $result = mysql_query($query);
    17.  
    18. // Проверяем результат
    19. // Это показывает реальный запрос, посланный к MySQL, а также ошибку. Удобно при отладке.
    20. if (!$result) {
    21.     $message  = 'Неверный запрос: ' . mysql_error() . "\n";
    22.     $message .= 'Запрос целиком: ' . $query;
    23.     die($message);
    24. }
    25.  
    26. // Используем результат
    27. // Попытка напечатать $result не выведет информацию, которая в нем хранится
    28. // Необходимо использовать какую-либо mysql-функцию, работающую с результатом запроса
    29. // См. также mysql_result(), mysql_fetch_array(), mysql_fetch_row() и т.п.
    30. while ($row = mysql_fetch_assoc($result)) {
    31.     echo $row["fio"];
    32.     echo $row["time_vh"];
    33.  
    34. }
    35.  
    36. // Освобождаем ресурсы, ассоциированные с результатом
    37. // Это делается автоматически в конце скрипта
    38. mysqli_close($link);
    39. ?>
    40. </body>
    41. </html>
     
  8. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  9. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Как по ссылке не выводит ничего, подставил эти переменные.

    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta  http-equiv="refresh" content="5"; charset="utf-8">
    5. </head>
    6. <body>
    7. <?php
    8. require_once 'connection.php'; // подключаем скрипт
    9. $link = mysqli_connect($host, $user, $password, $database)
    10.     or die("Ошибка " . mysqli_error($link));
    11.           mysqli_query($link,"SET CHARACTER SET 'utf8'");
    12. mysqli_query($link,"SET SESSION collation_connection ='utf8_unicode_ci'");
    13. $query ="SELECT ft.fio , pr.time_vh from prohod as pr left join fio_table as ft on pr.propusk = ft.propusk order by pr.propusk desc";
    14.  
    15. if ($result = $mysqli->query($query)) {
    16.  
    17.     /* извлечение ассоциативного массива */
    18.     while ($row = $result->fetch_assoc()) {
    19.         printf ("%s (%s)\n", $row["ft.fio"], $row["pr.time_vh"]);
    20.     }
    21.  
    22.     /* удаление выборки */
    23.     $result->free();
    24.  
    25. mysqli_close($link);
    26. ?>
    27. </body>
    28. </html>
     
  10. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    так что покажет?
    PHP:
    1. $link=mysqli_connect($host,$user,$password,$database);
    2.  
    3. printf("Соединение не удалось: %s\n", mysqli_connect_error());
    4. exit();
    5. }
    6.  
    7. $query = "SELECT ft.fio , pr.time_vh from prohod as pr left join fio_table as ft on pr.propusk = ft.propusk order by pr.propusk desc";
    8.  
    9. if ($result = mysqli_query($link, $query)) {
    10.      $row = mysqli_fetch_assoc($result);
    11.      print_r($row);
    12. }else{
    13.       echo 'нет данных';
    14. }
     
    #10 Artur_hopf, 9 июн 2019
    Последнее редактирование: 9 июн 2019
    shiyri нравится это.
  11. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    СПАААААСИБО большое!!!!!
     
  12. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    WAAAAAAAAGH!!!!! не за что =)
     
  13. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Подскажите еще пожалста.
    Как обновить записи в одной строке если знаем два значения из нее
    Код (Text):
    1. "UPDATE prohod SET (status = '0', time_vih='$datev',date_vih = '$datey')
    2. SELECT status,  date_vih, time_vih
    3. FROM prohod WHERE propusk=0006 AND id=MAX(ID)";
     
  14. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. $query = "UPDATE prohod SET (status = '0', time_vih='".$datev."', date_vih = '".$datey."')
    2. WHERE propusk = '0006'";
    3.  
    4. mysqli_query($link, $query);
    5.  
    6. $query = "SELECT status,  date_vih, time_vih
    7. FROM prohod
    8. WHERE propusk=0006 AND id=MAX(ID)";
    9. if ($result = mysqli_query($link, $query)) {
    10.     while($row = mysqli_fetch_assoc($result)){
    11.      // echo...
    12.     }
    13. }
     
    #14 Artur_hopf, 9 июн 2019
    Последнее редактирование: 9 июн 2019
  15. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Подскажите, что можно придумать заместо: id=MAX(id)
    с ним выходит ошибка:
    Код (Text):
    1. LIMIT 0, 25
    2.  
    3. Ответ MySQL: Документация
    4. #1111 - Invalid use of group function
     
  16. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    тебе максимальный id что ли нужен?
    или последняя запись?
    PHP:
    1. $query = "SELECT status,  date_vih, time_vih
    2. FROM prohod
    3. WHERE propusk=0006
    4. order by id desc
    5. limit 1";
     
    #16 Artur_hopf, 9 июн 2019
    Последнее редактирование: 9 июн 2019
  17. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Код (Text):
    1. SELECT id, status, date_vih, time_vih FROM prohod WHERE propusk=0006 order by id desc limit 1
    в эту выборку уфффф надо обновить
    Код (Text):
    1. UPDATE prohod SET (status = '0', time_vih='".$datev."', date_vih = '".$datey."')
    как их правельно состыковать?
     
  18. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @shiyri давай сам дальше, база у тебя теперь есть. :)
     
  19. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Ок спасич!
     
  20. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    не лезь пока в php , у тебя же наверно есть mysql клиент, ставь опыты там.
     
  21. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    Изучаю на этом проекте php и mysql ложкой и вилкой без еды не научишься пользоваться :)))
     
  22. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    START TRANSACTION;
    SELECT id FROM prohod WHERE propusk=0006 ORDER BY id DESC LIMIT 1 FOR UPDATE;
    UPDATE prohod SET status = 0 WHERE id = id;
    COMMIT;
    эта конструкция в mysql работает, как перевести в php?
     
  23. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @shiyri вы хоть что нибудь понимаете в своем запросе?

    Или хотя бы вот в этом:
    PHP:
    1. UPDATE prohod  as pr,
    2. (SELECT id FROM prohod WHERE propusk='0006' ORDER BY id DESC LIMIT 1) as src
    3. SET pr.status = 0 WHERE pr.id = src.id;
     
  24. shiyri

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

    С нами с:
    8 июн 2019
    Сообщения:
    111
    Симпатии:
    0
    as создает временную таблицу pr далее по ней запрос
    выбрать id из оригинальной таблицы prohod если propusk = 0006 и отсортировать по убыванию id и взять первую строку
    предыдущую выборку взять за временную таблицу src
    обновить значение временной таблицы pr в ячейке статус 0 если во временной таблице id = id временной таблице src.
    в том что выше написал про start transaction тоже понимаю, но как реализовать хз.
     
  25. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @shiyri ну так наверное:
    PHP:
    1. $query = "UPDATE prohod  as pr,
    2. (SELECT id FROM prohod WHERE propusk='0006' ORDER BY id DESC LIMIT 1) as src
    3. SET pr.status = 0 WHERE pr.id = src.id;";
    4.  
    5. mysqli_query($link, $query);