Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: automatyczne zapytanie SQL w tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
macieju1974
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 ?
trueblue
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).
macieju1974
Hej trueblue, czy mógłbyś podać jakiś mały przykład?
trueblue
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.
macieju1974
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. <div class="col-md-4">
  2. <div class="form-group">
  3. <label>Ostatnie wskazanie:</label>
  4. <input type="text" name="wpis_ostatni" value="<?php echo $output_ostatni ." m3";?>" class="form-control">
  5. </div>
  6. </div>
  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. echo "Wpis dodano pomyślnie !";
  15. }
  16.  
  17.  
  18. else
  19. {
  20. echo "Error: " . "<br>" . $conn->error;
  21. }
  22.  
  23.  
  24. ?>
  25.  


no i nie działa,
trueblue
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).
macieju1974
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....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.