Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: UNION i while
Forum PHP.pl > Forum > PHP
Apo
Witam
Pisze sobie funkcje która ma za zadanie wygenerowanie listy select i zaznaczenie odpowiedniej pozycji (option) selected. Mam w bazie 2 tabele. W jednej są wyszstkie kategorie artykułów:

|id|nazwa_kategorii

a w drugiej artykuły:

|id|wpis|autor|kategoria

No i robie zapytanie do bazy:

  1. SELECT id, kategoria
  2. FROM arty
  3. WHERE id='$id' UNION SELECT id, nazwa
  4. FROM arty_cat


Dzięki temu wybieram 2 rekordy z tabeli artykuów i wszystkie kategorie z tabeli kategorii artykułów.
No i następnie musze porównać którą kategorie posiada artykuł aby zrobić ją selected w pole a reszte nie, więc robie:

  1. <?php
  2. Public Function Cat_Select( $id )
  3. {
  4. $this -> db -> query( "SELECT id, kategoria FROM arty WHERE id='$id' UNION SELECT id, nazwa FROM arty_cat" );
  5. while($array = $this -> db -> fetch_row())
  6. {
  7. $tablica[] = $array;
  8. }
  9.  
  10. for($i=0; $i<count($tablica); $i++)
  11. {
  12. if($tablica[0][1] == $tablica[$i][0])
  13. {
  14. echo '<option value="'.$tablica[$i][0].'" selected>'.$tablica[$i][1].'</option>';
  15. }
  16. else
  17. {
  18. echo '<option value="'.$tablica[$i][0].'">'.$tablica[$i][1].'</option>';
  19. }
  20. }
  21. }
  22. ?>

No i niby wszystko jest ok, a efekt jest taki:
  1. <?php
  2. <option value="7">3</option>
  3. <option value="1">programowanie</option>
  4. <option value="2">grafika</option>
  5. <option value="3" selected>Inne</option>
  6. ?>


No i pierwszej pozycji wole nie powinno być a sie pojawie i nie wiem czemu :?
Dodatkowo dam printa tablicy $tablica:

  1. <?php
  2. (
  3. [0] => Array  <---------- jako $tablica[0] zawsze jest artykuł a reszta to kategorie
  4. (
  5. [0] => 7
  6. [1] => 3
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [0] => 1
  12. [1] => programowanie
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [0] => 2
  18. [1] => grafika
  19. )
  20.  
  21. [3] => Array
  22. (
  23. [0] => 3
  24. [1] => Inne
  25. )
  26.  
  27. )
  28. ?>
SongoQ
Jesli chesz posortowac to zapytanie jakie masz teraz wstaw jako podrzedne a w nadrzednym uzyj sortowania ORDER BY, tylko z tego co widze to raczej chodzi Ci o cos takiego zeby najpierw byla kategoria a pozniej art - to wtedy wstawiasz 2 pole i np faga ustawiasz sobie ze 1 to kategoria 2 to art i pozniej sortujesz

Przyklad

  1. SELECT *
  2. FROM (SELECT
  3. id, pole, '1' AS typ
  4. FROM ........
  5. UNION
  6. SELECT id, pole, '2' AS typ
  7. FROM .....
  8. )
  9. ORDER BY typ, pole
Apo
tylko mi juz nie chodzi o zapytanie tongue.gif One jest ok. Problem leży w pętli for bo wyrzuca mi za dużo:
  1. <?php
  2. <option value="7">3</option>  ////// <------ tego nie powinno byc 
  3. <option value="1">programowanie</option>
  4. <option value="2">grafika</option>
  5. <option value="3" selected>Inne</option> ////// <------ a to ma byc :)
  6. ?>


edit ://
Juz sobie poradzilem smile.gif Problem był przez to ze w tablicy zwracanej po zapytaniu bylo dołączane jedno pole więcej. I instrukcją if je wyrzuciłem.
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.