Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] SELECT rzędy WHERE suma danej kolumny = 10
Forum PHP.pl > Forum > Bazy danych
kreatiff
Czy idzie jednym zapytaniem wybrać takie rzędy, których kolumna suma(liczba) będzie wynosiła dokładnie 10 (kolejność wybierania rzędów ustalona przez ich klucz główny id)? Np. zaczynając od id=1 jak w poniższym przykładzie:
  1. +----+--------+
  2. | id | liczba |
  3. +----+--------+ zaczynamy: suma(liczba) = 0
  4. | 1 | 1 | OK suma = 1 - ten rząd trafia do wyniku, suma wzrasta
  5. | 2 | 2 | OK suma = 1 + 2 = 3 - ten rząd trafia do wyniku, suma wzrasta
  6. | 3 | 5 | OK suma = 3 + 5 = 8 - ten rząd trafia do wyniku, suma wzrasta
  7. | 4 | 4 | X suma = 8 + 4 = 12 - za dużo, ten rząd nie trafia do wyniku, suma nie wzrasta
  8. | 5 | 3 | X suma = 8 + 3 = 11 - j.w.
  9. | 6 | 1 | OK suma = 8 + 1 = 9 - trafia do wyniku, suma wzrasta
  10. | 7 | 4 | X suma = 9 + 4 = 13 - nie trafia, suma nie wzrasta
  11. | 8 | 1 | OK suma = 9 + 1 = 10 - trafia do wyniku, suma = 10, to jest ostatni poszukiwany rząd, koniec
  12. | 9 | 5 |
  13. | 10 | 4 |
  14. +----+--------+
Z kolei zaczynając od id = 7 do wyniku trafią 3 kolejne rzędy, ponieważ 4 + 1 + 5 = 10
  1. DROP TABLE IF EXISTS `liczby`;
  2. CREATE TABLE `liczby` (
  3. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `liczba` int(10) UNSIGNED DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
  7.  
  8. -- ----------------------------
  9. -- Records of liczby
  10. -- ----------------------------
  11. INSERT INTO `liczby` VALUES ('1', '1');
  12. INSERT INTO `liczby` VALUES ('2', '2');
  13. INSERT INTO `liczby` VALUES ('3', '5');
  14. INSERT INTO `liczby` VALUES ('4', '4');
  15. INSERT INTO `liczby` VALUES ('5', '3');
  16. INSERT INTO `liczby` VALUES ('6', '1');
  17. INSERT INTO `liczby` VALUES ('7', '4');
  18. INSERT INTO `liczby` VALUES ('8', '1');
  19. INSERT INTO `liczby` VALUES ('9', '5');
  20. INSERT INTO `liczby` VALUES ('10', '4');
trueblue
  1. SELECT id,liczba,@suma:=@suma+liczba FROM liczby,(SELECT @suma:=0) AS init WHERE @suma+liczba<=10
kreatiff
Dziękuję za pomoc.
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-2025 Invision Power Services, Inc.