Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ograniczony wynik zapytania do 1024znaków (?)
Jarod
post 5.08.2007, 19:20:42
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Trafiłem dzisiaj na dosyć dziwny przypadek.

Mam takie zapytanie:
  1. SELECT group_name, group_description, GROUP_CONCAT(role_name, \' (', role_description, ')' SEPARATOR '|') As roles FROM groups LEFT JOIN groups_roles USING(group_id) LEFT JOIN roles USING(role_id) GROUP BY group_name\G



Przykładowy wynik:
Cytat
group_name - Administratorzy
group_description - Administratorzy systemu
roles - ChangeLogView (Przeglądanie changeloga)|ListOfUsers (Przeglądanie listy użytkowników)|AddUser (Dodawanie użytkownika)|SearchUser (Szukanie użytkownika)|AddUserToGroup (Dodawanie użytkownika do grupy)|AddRoleToGroup (Dodawanie roli do grupy)|DeleteUserFromGroup (Usuwanie użytkownika z grupy)|DeleteRoleFromGroup (Usuwanie roli z grupy)|LogsView (Przeglądanie logów)|EventsView (Przeglądanie zdarzeń)|(...)|AddL



Problem w tym, że roles jest obcinane do 1024 znaków. Ucina na AddL a powinno być jeszcze sporo innych ról. To jakieś ograniczenie Mysqla?questionmark.gif

Ten post edytował Jarod 5.08.2007, 20:04:23


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
sf
post 5.08.2007, 19:45:39
Post #2





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Tyle ustawiłeś znaków na kolumnę to tyle jest. Spójrz na strukturę tabeli.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
Jarod
post 5.08.2007, 20:03:21
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(sf @ 5.08.2007, 18:45:39 ) *
Tyle ustawiłeś znaków na kolumnę to tyle jest. Spójrz na strukturę tabeli.

Przecież to nie ma znaczenia, bo łącze stringi za pomocą GROUP_CONCAT(). Spójrz jeszcze raz na kwerende. Struktura tabeli roles:


Kod
mysql> describe roles;
+------------------+-------------+------+-----+---------+----------------+
| Field            | Type        | Null | Key | Default | Extra          |
+------------------+-------------+------+-----+---------+----------------+
| role_id          | int(11)     | NO   | PRI | NULL    | auto_increment |
| role_name        | varchar(30) | NO   | UNI |         |                |
| role_description | varchar(60) | NO   |     |         |                |
+------------------+-------------+------+-----+---------+----------------+



Wygląda na to jakby wynik zwracany przez funkcję GROUP_CONCAT() był ograniczony do 1024znaków.

EDIT: Tak myślałem.. Z manuala:
Cytat
The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the maximum effective length of the return value is constrained by the value of max_allowed_packet. The syntax to change the value of group_concat_max_len at runtime is as follows, where val is an unsigned integer:

SET [SESSION | GLOBAL] group_concat_max_len = val;

Beginning with MySQL 5.0.19, the type returned by GROUP_CONCAT() is always VARCHAR unless group_concat_max_len is greater than 512, in which case, it returns a BLOB. (Previously, it returned a BLOB with group_concat_max_len greater than 512 only if the query included an ORDER BY clause.)


Są 2 rozwiązania:
1. Ustawiać za każdym razem (bałbym się stosować global) przy próbie pobrania tych danych
SET SESSION group_concat_max_len = nasza_wartość;
2. Wykorzystać tymczasową tabelę



Które rozwiązanie jest lepsze (Waszym zdaniem)?

Ten post edytował Jarod 5.08.2007, 20:03:53


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 10:26