Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] struktura drzewa, poziomy, ilość elementów
lenczewski
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 1
Dołączył: 31.08.2005

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


witam, mam taką tabelę
  1. CREATE TABLE `dane` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `pozycja` varchar(255) NOT NULL DEFAULT '',
  4. `system` varchar(64) NOT NULL DEFAULT '',
  5. `tag1` varchar(255) NOT NULL DEFAULT '',
  6. `dane` text,
  7. `typ` varchar(255) DEFAULT NULL,
  8. `plik` int(11) NOT NULL DEFAULT '0',
  9. `atrybuty` text,
  10. `element_pusty` enum('y','n') NOT NULL DEFAULT 'n',
  11. UNIQUE KEY `id` (`id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

oraz dane
  1. (12, '0,1', 'TREE', 'aDSsad', 'saDASDASD', 'Czas', 21, '', 'n')
  2. (13, '0,2', 'TREE', 'ASDASDASD', 'ASDASDADA', 'Czas', 21, '', 'n')
  3. (14, '0,3', 'TREE', 'sadsad', 'asdasdasd', 'Czas', 21, '', 'n')
  4. (15, '0,2,1', 'TREE', 'sadads', 'asdasdasdasd', 'Czas', 21, '', 'n')


Najbardziej interesuje mnie kolumna "pozycja" (np. '0,2,1'),a dokładnie ilość elementów głównych.
Wyjaśniam dokładniej
Kod
- 0,1
- 0,2
  - 0,2,1
- 0,3
  - 0,3,1
  - 0,3,2
    - 0,3,2,1
    - 0,3,2,2
  - 0,3,3

Chciałbym stworzyć zapytanie które zwróci mi albo liczbę elementów głównych (w grupie 0, w tym przypadku 3), albo np. maksymalną wartość (dla grupy 0,3,2 wartość po przecinku to 1 i 2 wiec powinno zwrócić wartość 2)

Fabian
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mysz
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

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


Jeśli chcesz porządne drzewka zrobić, to polecam:
depesz.com/various/various-sqltrees.php metoda 5

A co do Twojej wersji:
Cytat
zapytanie które zwróci mi albo liczbę elementów głównych (w grupie 0, w tym przypadku 3),


  1. SELECT COUNT(`id`) AS `quant` FROM `dane` WHERE `pozycja` RLIKE '^0,[0-9]+$'


Cytat
maksymalną wartość (dla grupy 0,3,2 wartość po przecinku to 1 i 2 wiec powinno zwrócić wartość 2)


  1. SELECT MAX(`pozycja`) FROM `dane` WHERE `pozycja` RLIKE '^0,3,2,[0-9]+$'


Z ostatnim to jak pokombinujesz to i w mysql wyciągniesz ostatnią cyfrę (polecam POSITION() i SUBSTR()).

edit:
Albo nieznane mi wcześniej: SUBSTRING_INDEX().

Ten post edytował mysz 19.04.2007, 09:34:22
Go to the top of the page
+Quote Post
lenczewski
post
Post #3





Grupa: Zarejestrowani
Postów: 159
Pomógł: 1
Dołączył: 31.08.2005

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


Dzięki za zapytania i za link do artykułu - pomogło.
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: 22.08.2025 - 12:50