Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ MySQL _ automatyczne zapytanie SQL w tabeli

Napisany przez: macieju1974 9.12.2021, 12:48:40

Witma wszystkich,

czy można w tabeli zapisać pytanie SQL ażeby automatycznie obliczało różnicę między najnowszym rekordem a poprzednim (np. z kolumny "wskazanie") i wpisywało do kolumny (dobowy) w tej samej tabeli ?

Napisany przez: trueblue 9.12.2021, 13:03:43

Nie musisz robić tego w MySQL.
Przed wstawieniem nowego rekordu pobierz ostatnią wartość (wartość 1). Wstaw nowy rekord z wartością (wartością 2) i różnicą (wartość 2 - wartość 1).

Napisany przez: macieju1974 10.12.2021, 11:20:28

Hej trueblue, czy mógłbyś podać jakiś mały przykład?

Napisany przez: trueblue 10.12.2021, 11:51:59

Jeśli wstawiasz rekordy z poziomu skryptu PHP, to przed wstawieniem pobierasz ostatni rekord z wartością (SELECT .... ORDER BY DESC LIMIT 0,1), zapamiętujesz ją i kiedy robisz INSERT, to wstawiasz nową wartość oraz różnicę nowej wartości tej z SELECT.

Napisany przez: macieju1974 10.12.2021, 12:19:08

ok pobieram ostatni wpis:

  1. <?php
  2. require("connect.php");
  3.  
  4. $sql_ostatni ="SELECT wskazanie FROM Przeplywy ORDER BY reading_date DESC LIMIT 0,1";
  5.  
  6.  
  7. $result_ostatni = $conn->query($sql_ostatni);
  8.  
  9. if ($result_ostatni->num_rows > 0)
  10. {
  11. while($row = $result_ostatni->fetch_assoc())
  12. {
  13.  
  14. $output_ostatni=" "." ".$row['wskazanie'];
  15. }
  16.  
  17. }
  18. ?>


zapamiętuje go tzn.wyświetlam np:
  1. <http://december.com/html/4/element/div.html class="col-md-4">
  2. <http://december.com/html/4/element/div.html class="form-group">
  3. <http://december.com/html/4/element/label.html>Ostatnie wskazanie:</http://december.com/html/4/element/label.html>
  4. <http://december.com/html/4/element/input.html type="text" name="wpis_ostatni" value="<?php echo $output_ostatni ." m3";?>" class="form-control">
  5. </http://december.com/html/4/element/div.html>
  6. </http://december.com/html/4/element/div.html>
  7.  


no i teraz wrzucam :
  1. <?php
  2. require("connect.php");
  3.  
  4. $date = $_POST['wpis_data'];
  5. $wskazanie = $_POST['wpis_wskazanie'];
  6. $ostatni = $_POST['wpis_ostatni'];
  7.  
  8.  
  9. $sql_dodaj = "INSERT INTO Przeplywy(id, reading_date, wskazanie,dobowy) VALUES ('', '$date','$wskazanie'-'$ostatni')";
  10.  
  11.  
  12. if ($conn->query($sql_dodaj) === TRUE)
  13. {
  14. http://www.php.net/echo "Wpis dodano pomyślnie !";
  15. }
  16.  
  17.  
  18. else
  19. {
  20. http://www.php.net/echo "Error: " . "<br>" . $conn->error;
  21. }
  22.  
  23.  
  24. ?>
  25.  


no i nie działa,

Napisany przez: trueblue 10.12.2021, 12:27:40

1. Skoro pobierasz jeden rekord, to w jakim celu w pętli?
2. W jakim celu doklejasz spacje do wartości?
3. Po co wyświetlasz ostatnią wartość w formularzu, jako wartość do edycji? A jeśli ją zmienię i zatwierdzę formularz?
4. Wyświetl sobie $sql_dodaj i sprawdź jak wygląda zapytanie.
5. Używaj PDO i bindowania wartości (https://www.php.net/manual/en/book.pdo.php).

Napisany przez: macieju1974 10.12.2021, 14:45:52

Dzięki kolego, znowu mi pomogłeś, bo naprowadziłeś mnie na trop, pogłówkowałem trochę i działa... rsc.gif
Faktycznie spacje są bez niepotrzebne i bez pętli też się da.
Uczę się tego tak hobbystycznie chociaż mam 47lat i niektóre wiadomości czy zagadnienia przychodzą mi trudniej. Dobrze że są fora i tacy ludzie...
A co do Używaj PDO i bindowania wartości to muszę zaczerpnąć tematu....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)