Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP][MySQL]Jak zapobiec się powtarzaniu var w liście?
Forum PHP.pl > Forum > Przedszkole
Soulast
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?
nospor
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 wink.gif
Soulast
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
nospor
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 smile.gif
ylk
Ale to można zrobić jednym zapytaniem - bez użycia tej niesmacznej pętli.
Soulast

  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ę 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?
nospor
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
Soulast
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:)
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.