Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP][MySQL]Jak zapobiec się powtarzaniu var w liście?, wyświetlanie listy bez powtarzania wartości
Soulast
post
Post #1





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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


Mianowicie mam ciągle jeden i ten sam problem.
Posiadając dwie bazy w jednej mam wartości:

TABELA1 = ID, NAZWA, IDGRUPY

w drugiej

GRUPY = IDGRUPY, NAZWA_grupy

Napisałem oto taki kod aby wyczytać w formie listy do wyboru przez select

  1. $sql= mysql_query("SELECT idgrupy FROM tabela1");
  2. while($tabel= mysql_fetch_array($sql))
  3. {
  4. $sql2= mysql_query("SELECT id,name FROM grupy WHERE idgrupy='$tabel[idgrupy]'");
  5. while(list($grupa,$nazwa) = mysql_fetch_row($sql2))
  6. {
  7. $lista.="<option value='index.php?grupa=$grupa'>$nazwa</option>";
  8. }
  9. }


Sęk w tym że wyświetlając liste powtarza mi się nazwa grupy a to ze względu na to że w tabel1 pare wartości może należeć do tej samej grupy.
Moje pytanie brzmi jak zrobić aby one się nie powtarzały?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Co ty w ogole chcesz osiągnąć? Po co ci to pierwsze zapytanie, z którego pobierasz tylko id grupy?
Napisz słownie co chcesz zrobic.

co do samego problemu to : DISTINCT lub GROUP BY
oraz ps:
robisz to w najgorszy z mozliwych sposobow: zapytania w petli to jakieś nieporozumienie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Soulast
post
Post #3





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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


hahaha....myślę że nie muszę wyjaśniać skoro zrozumiałeś mnie bez słów!:D
Dzięki DISTINCT uzyskałem to czego szukałem

  1. $sql= mysql_query("SELECT DISTINCT idgrupy FROM tabela1");
  2. while(list($groupa) = mysql_fetch_row($sql))
  3. {
  4. $gro = mysql_query("SELECT id,nazwaFROM groupy WHERE id='$groupa[idgrupy ]'");
  5. $gro = mysql_fetch_array($gro);
  6.  
  7. $list.="<option value='events.php?grupa=$gro[id]' ".($gro[id] == $group ? "SELECTED" : "").">$gro[nazwa]</option>";
  8. }
  9.  


Działa bez problemu!!!!!Dziękuje za pomoc!!!!:D:D:D
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
hahaha....myślę że nie muszę wyjaśniać skoro zrozumiałeś mnie bez słów!:D
Jednak dobrze zebys wyjasnil, bo jak napisałem twoje rozwiązanie jest do 4 liter, gdyż w pętli używasz zapytan a to jest bardzo nieoptymalne. Jakbyś napisał slownie co ty cudujesz to podałbym ci lepsze rozwiązanie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
ylk
post
Post #5





Grupa: Zarejestrowani
Postów: 194
Pomógł: 26
Dołączył: 9.01.2011
Skąd: /dev/null

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


Ale to można zrobić jednym zapytaniem - bez użycia tej niesmacznej pętli.
Go to the top of the page
+Quote Post
Soulast
post
Post #6





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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



  1. $sql= mysql_query("SELECT DISTINCT idgrupy FROM tabela1");
  2. while(list($groupa) = mysql_fetch_row($sql))
  3. {
  4.  
  5. $gro = mysql_query("SELECT id,nazwaFROM groupy WHERE id='$groupa[idgrupy ]'");
  6. $gro = mysql_fetch_array($gro);
  7.  
  8. $list.="<option value='events.php?grupa=$gro[id]'>$gro[nazwa]</option>";
  9.  
  10. }
  11.  
  12. echo <select name='grupa' onChange=\"window.location.href=''+this.value\">$list</select>


Do tabeli1 są wrzucane dane typu id, nazwa oraz grupa jako jedyna może być wspólna dla wielu innych nazw.
Jak ktoś zna prostsze optymalne rozwiązanie to proszę (IMG:style_emoticons/default/smile.gif)

Puki co jestem samoukiem i ciągle się tylko uczę z góry dziękuje za wszelką pomoc.


A więc jaki jest pomysł na optymalizacje kodu?
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jedno zapytanie (twoje główne co teraz masz), które używa LEFT JOIN by dołączyc jeszcze tabelę z grupą. I już zadnych wiecej zapytan w petli.
Nadal nie rozumiem jednak po co ci select z tabela1
Go to the top of the page
+Quote Post
Soulast
post
Post #8





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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


Czyli przy select join mniej wiecej to powinno wyglądać tak?

  1.  
  2. $sql= mysql_query("SELECT grupy.id, grupy.nazwa FROM grupy LEFT JOIN tabela1 ON grupy.id = tabela1.idgrupy");
  3. while(list($gid,$nazwa)=mysql_fetch_row($sql))
  4. {
  5.  
  6. $list.="<option value='index.php?grupa=$gid'>$nazwa</option>";
  7.  
  8. }
  9.  
  10. echo <select name='grupa' onChange=\"window.location.href=''+this.value\">$list</select>
  11.  


Ponieważ dodając coś do tabeli1 wybieram grupe która się także zapisuje w tej tabeli.
I chciałem aby tylko wyświetlały grupy z tabeli1 bez ich powtarzania się.A dzięki select onChange mnie przerzuca do wybranej grupy.
Niestety tak jak wspominałem puki co to jeszcze początkuje:)

Ten post edytował Soulast 15.02.2011, 12:28:51
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: 23.08.2025 - 04:39