Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyswietlanie wartosci enum
Forum PHP.pl > Forum > Bazy danych > MySQL
athabus
Witam. Mam tabele, a w niej pole typu enum. Musze wydobyc wszystkie wartosci jakie moga pojawic sie w tym polu.

Na razie robie to tak

  1. SELECT pole
  2. FROM tabela GROUP BY pole


Zasadniczo dziala, ale czy jest jakies zapytanie, ktore wyswietli wszystkie mozliwe wartosci pola Enum - moje zapytanie wyswietli tylko te, ktore akutalnie uzyte sa w tabeli. Pozatym mysle, ze to zapytanie nie jest optymalne pod wzgledem czasu wykonania.
mhs
Witam,

samego zapytania, ktore wydobywa dostepne wartosci enum nie znam (chociaz jak wydaje mi sie - aczkolwiek nie jestem pewien - ze kiedys cos takiego widzialem). Natomiast jak wydobyc w ogole dostepne wartosci to zobacz tutaj:

http://dev.mysql.com/doc/refman/5.0/en/enum.html

Zobacz do komentarzy (znajduja sie na samym dole strony) w jaki posob wydowbywaja tutaj poszczegolne wartosci. Masz juz gotowca. Generalnie korzystaja z:
  1. SHOW COLUMNS
  2. FROM tbl_name LIKE enum_col
athabus
Dzieki za podpowiedz -tez znalazlem ten sposob aarambo.gif Tylko ze to nie jest dokladnie to o co mi chodzilo sad.gif

Ale chyba musi istniec takie zapytanie. Ide szukac dalej sadsmiley02.gif

//edit nic nie znalazlem - napislame wiec taki skrypt gdyby komus sie przydalo

  1. <?php
  2.  
  3.     /**
  4.      * Zwraca tablice numerowan, w ktorej kazdy element to jedna z pozycji enum
  5.      * zdefiniowanej kolumny z danej tabeli
  6.      * 
  7.      * @$nazwa_tabeli - Tabela z ktorej maja byc pobrane dane
  8.      * @$nazwa_kolumny - kolumna z ktorej maja byc pobrane dane
  9.      */
  10.     function get_enum_values($nazwa_tabeli, $nazwa_kolumny)
  11.     {
  12.         $sql = "SHOW COLUMNS FROM $nazwa_tabeli LIKE '$nazwa_kolumny'";
  13.         
  14.         try
  15.         {
  16. //tu podmien na twoj sposob laczenia z baza
  17.             $wynik=$this->db->query($sql);
  18.             $wiersz=$wynik->fetch_assoc();
  19.             $ciag_enum=$wiersz['Type'];
  20.             
  21.         }
  22.         catch (Exception $e)
  23.         {
  24.             throw new Exception ('Odczyt z bazy zakończony niepowodzeniem');
  25.         }
  26.         
  27.         //poczatkowo ciag ma postac "enum('cos','cos')" - usuwamy "enum(" oraz ")"
  28.         $ciag_enum= substr($ciag_enum, 5, strlen($ciag_enum)-6);
  29.         
  30.         $tablica= explode("','" , $ciag_enum);
  31.         
  32.         //pierwszy element ma na poczatku ' a ostatni ma na koncu ' trzeba
  33.         //te znaki usunac
  34.         
  35.         $tablica[0]=substr ($tablica[0], 1);
  36.         $tablica[count($tablica)-1]=substr($tablica[count($tablica)-1],0,-1);
  37.         
  38.         //zwalniam wynik zapytania
  39.         $wynik->free();
  40.         
  41.         return $tablica;
  42.     }
  43.     
  44.    
  45. ?>


Może nie jest to najkrótszy sposób, ale nie korzysta z wyrażeń regularnych więc powinien być w miarę szybki
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.