Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak pobrac nazwe kolumny ?
Forum PHP.pl > Forum > Bazy danych
krz2005
Witam.

Mam problem jak wykonac takie cos: Chce wykonac takie zapytanie, zeby w wyniku podalo mi(najlepiej w tablicy) wszystkie nazwy kolumn, gdzie znajduje sie wartosc np: "pies". Tak, ze jak wykonam zapytanie to w wyniku bede mial imiona: Kasia, Piotrek, Ania(znaczy to tylko przyklady smile.gif ) Tak jak na obrazie ponizej:




Z gory Dziekuje za pomoc. Wszystkie sugestie mile widziane...

Pozdrawiam
gdaq
http://dev.mysql.com/doc/mysql/en/describe.html

Gdaq
krz2005
Dziękuję za odpowiedź, ale... Jakoś po przeczytaniu niedowiedzialem sie jak ma wygladac zapytanie sql, zeby wyswietlilo mi nazwy kolumn w ktorych jest wyraz "pies"...

Jezeli ktos moglby mi pomoc i napisac zapytanie sql, albo kawalek kody php jezeli nieda rady zrobic tego przez same sql. Bylbym bardzo wdzieczny.

Z gory dziekuje za pomoc.

Pozdrawiam
wojto
Cytat
Wszystkie sugestie mile widziane
moja sugestia jest taka, że ta baza jest źle zaprojektowana.
Napisz dokładnie do czego jest Ci potrzebna ta tabela, to wtedy zobaczymy jak powinna być stworzona.

Jeśli byś jednak chciał pozostać przy takiej strukturze, to może to będzie ci pomocne:
  1. <?php
  2. // łączenie z bazę
  3. $sql = mysql_query(&#092;"select * from tabela\");
  4. $nf = mysql_num_fields($sql); // pobieramy ilość kolumn
  5.  
  6. for ($i = 0; $i < $nf; $i++) { // tabela po wszystkich kolumnach
  7. $fn = mysql_field_name($sql, $i); // pobieramy nazwe kolumny
  8.  
  9. // teraz majac nazwe kolumny wykonujemy zapytanie
  10. // pomijamy zerowa kolumne, gdzie jest przetrzymywane id
  11. // zapytanie musi przebiec po kazdym rekordzie i sprawdzac kazda kolumne, jesli zn
  12. jdziemy szukany wyraz (np. pies), to zwracamy nazwe danej kolumny
  13. }
  14.  
  15. ?>

sposób ten nie jest napewno optymalny.
Raczej napewno twoja tabela ma złą strukturę.
gdaq
  1. <?php
  2.  
  3. $result=mysql_query(&#092;"describe tabela\");
  4. while($row=mysql_fetch_row($result))
  5. print $row[0];
  6.  
  7. ?>

Dostaniesz nazwy kolumn w ten sposob



Gdaq
krz2005
Dziekuje za odpowiedz.

Wlasnie tego sie obawialem... Chcialem tego uniknac - zeby php "uwiklalo" sie w wykonywanie tysiecy petli. Mam 3 sposoby zaprojektowania bazy. Ten podobalby mi sie najbardziej poniewaz wszystkie czynnosci za php wykonywalby mysql, ale skoro tak sie nieda to...

Robie taki projekt, ze na stronie internetowej kazdy moze dopisac sobie swoj numerek gg. Do tego moze sobie dopisac nazwe tematu z ktorego ma dostawac wiadomosci. I pozniej skrypt dostaje wiadomosc o pewnym temacie i ma wybrac do ktorych "numerkow gg" ma wyslac wiadomosc. Tematy rzecz jasna beda sie powtarzac(kilka numerkow na pewno bedzie mialo po czesci pokrywajace sie tematy) i liczba tematow, ktora moze wybrac uzytkownik jest nieograniczona.

To jak ktos moglby przedstawic swoj pomysl to bylbym bardzo wdzieczny. Mam juz swoj taki zamysl, ale mile widziane sugestie - moze znajde lepszy pomysl smile.gif

Pozdrawiam
wojto
Teraz sytuacja wygląda dużo prościej.
Tabele mogą wyglądać tak:

Użytkownicy:
Kod
id | nazwa | gg | inne pola ...


Tematy:
Kod
id | tytul | inne pola ...


Powiadomienia:
Kod
id_uzytkownika | id_tematu


Gdy jakiś użytkownik dodaje temat do "śledzonych" to dodawany jest rekord do tabeli powiadomienia z polami: id użytkownika i id bieżącego tematu

Jak ktoś odpowie w danym temacie, to dajesz zapytanie:
  1. "SELECT u.gg
  2. FROM powiadomienia p, uzytkownicy u WHERE uzytkownik.id=powiadomienie.id_uzytkownika AND p.id_tematu='".$_GET['id']."'"

($_GET['id'] jest biezacym tematem)
i lecisz whilem po wynikach zapytania:
  1. <?php
  2. while ($row = mysql_fetch_array($sql)) {
  3. wyslij_gg($row['gg']);
  4. }
  5. ?>
krz2005
Wlasnie nad takim rozwiazaniem myslalem. Wszystko zrobiles tak jak chcialem z jednym malym szczegolem. Tabela "Powiadomienia" ma taka strukture:
Kod
id_uzytkownika | id_tematu


A uzytkownik przeciez moze miec kilka tematow z ktorych chce otrzymywac wiadomosci, wiec zapisanie jednego(biezacego questionmark.gifquestionmark.gif) id_tematu niepomoze smile.gif Chyba, ze komorka id_tematu bedzie wygladala mniej wiecej tak: "1;5;21;3;6" I po pobraniu danych w php trzeba byloby napisac funkcje:
Kod
$a = explode(";", $komorka);
$x = 0;
while(!$a[$x])
     {
      if($a[$x] == $id_tematu_ktory_wyslac) funkcja_do_wysylania($id_uzyt);
      $x++;
      }

Powyzsza funkcja jest przykladowa(pisalem ja szybko i z pamieci smile.gif )wiec prosze nie patrzec, czy niema bledow - chodzi o sam sposob pobrania danych. smile.gif

Albo zrobic taka tabelke:
Kod
id_uzytkownika | id_tematu | id_tematu2 | id_tematu3| itd...

Ale to by sie sprowadzalo do tego o czym rozmawialismy wczesniej.

Co o tym myslisz Wojto questionmark.gifquestionmark.gif Rozumiesz o co mi chodzi ? Ze uzytkownik nieustannie moze sobie dopisywac nowe tematy z ktorych chce dostawac wiadomosci.

Dziekuje chlopaki, ze pomagacie mi smile.gif Bo ja, az tak dobrze nieznam sie na bazach mysql i niewiem jakie rozwiazanie byloby najlepsze. smile.gif

Pozdrawiam
wojto
no wlasnie moja konstrukcja to umozliwia, bo mozesz miec wiele rekordow z tym samym uzytkownikiem, np.

Kod
id_uzytkownika | id_tematu
1 | 1
2 | 1
1 | 2
3 | 1
1 | 4
1 | 5

i teraz lecac petla while tak jak podalem wczesniej mozesz pobrac wszystkie tematy ktore dany uzytkownik obserwuje
krz2005
No wlasnie smile.gif Dlaczego ja tego niezauwazylem ? rolleyes.gif No wlasnie o to mi chodzi.. Dziekuje Wojto. Jak jeszcze czegos niebede wiedzial to bede pisal tongue.gif

Pozdrawiam
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.