Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzanie poprawności przedziałów
nexis
post
Post #1





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


Mam tabelę w bazie danych o następującej strukturze:

Kod
+++++++++++++++++++++++++++
+     od +     do + marza +
+++++++++++++++++++++++++++
+   0.00 +  99.99 + 10.00 +
+ 100.00 + 199.99 + 20.00 +
+ 200.00 + 299.99 + 30.00 +
+ 280.00 + 399.99 + 40.00 +
+++++++++++++++++++++++++++


która zawiera przedziały cenowe wraz z odpowiednimi prowizjami. Przy wprowadzaniu wartości chciałbym sprawdzać, czy poszczególne przedziały cenowe na siebie nie nachodzą i chciałem do tego wykorzystać transakcje. Jak jednak w łatwy sposób ustalić, czy przedziały faktycznie na siebie nie nachodzą? W powyższym przykładzie ostatni wpis jest nieprawidłowy, ponieważ nachodzi na przedostatni.

Drugim problemem było sprawdzenie czy nie ma pustych zakresów, tzn. że jest przerwa między przedziałami (dokładność do jednego grosza, maksymalna wartość 99 999 999.99, czyli DOUBLE(10,2)).

Ten post edytował nexis 13.12.2008, 20:08:20
Go to the top of the page
+Quote Post
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

Ostrzeżenie: (0%)
-----


na przykładzie, może coś zauważysz co Cie naprowadzi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
100 - 99.9 = 0.01
200 - 199.99 = 0.01
280 - 299.99 = -19.99
Go to the top of the page
+Quote Post
nexis
post
Post #3





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


Cytat(Darti @ 13.12.2008, 21:18:57 ) *
na przykładzie, może coś zauważysz co Cie naprowadzi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
100 - 99.9 = 0.01
200 - 199.99 = 0.01
280 - 299.99 = -19.99


  1. <?php
  2. if ($_POST['from'] >= $_POST['to']) {
  3.   exit('End value must be larger than start value!');
  4. }
  5. // Begin transaction
  6. $this->db->beginTransaction();
  7. $query = sprintf
  8.   (
  9.      "INSERT INTO `comission` (`from`, `to`, `comission`) VALUES ('%01.2f', '%01.2f', '%01.2f')",
  10.      $_POST['from'],
  11.      $_POST['to'],
  12.      $_POST['comission']
  13.   );
  14. $this->db->query($query);
  15. // Search for overlapping values or empty spaces
  16. try {
  17.   $query = "SELECT `from`, `to` FROM `comission` ORDER BY `from` ASC";
  18.   $last  = -0.01;
  19.   foreach ($this->db->fetchAll($query) as $row) {
  20.      $diff = round($row['from']-$last, 2);
  21.      if ($diff != 0.01) {
  22.         if ($diff > 0.01)
  23.            throw new Exception('Empty spaces between values!');
  24.         else
  25.            throw new Exception('Overlapping values!');
  26.      }
  27.      $last = $row['to'];
  28.   }
  29.   $this->db->commit();
  30. } catch (Exception $e) {
  31.   $this->db->rollBack();
  32.   exit($e->getMessage());
  33. }
  34. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 15:06