Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem ze sfromuowaniem zapytania
hmmm
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 0
Dołączył: 4.01.2005

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


mam problem ze sformuowaniem zapytania ...

mam dwie tabele:
1. kategorie
- id
- kategoria (np. 'niemiecki', 'programy')
2. download
- id
- kategoria (numery odpowiadajace dla kategorie.id)
- plik (nazwa pliku)
- nazwa (opis pliku)
- wielkosc

chcialbym teraz za pomoca najchetniej jednego zapytania, jezeli sie nie da, to dwoch (przypuszczam, ze petla w petli) wyswietlic to w takiej formie:

Kod
nazwa_kategorii1:
nazwa_pliku  |  opis_pliku  |  wielkosc_pliku
nazwa_kategorii2:
nazwa_pliku  |  opis_pliku  |  wielkosc_pliku
i tak dalej

czyli podzielic najpierw na kategorie i pod nazwa kazdej kategorii wyswietlic pliki nalezace do tej kategorii.
probowalem, ale nie wychodzi.
wszystko bylo dobrze, dopoki mialem jedna tabele - kategorie i zamiast wartosci liczbowych w kolumnie kategorie mialem nazwy kategorii.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bigZbig
post
Post #2





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Wiekszosc zadan mozna wykonac na wiele roznych sposobow. Dobrze jest jezeli masz zoptymalizowany kod, ale jeszcze lepiej jesli to jest Twoj kod - nawet gdy nie jest w pelni profesjonalny. Piszac cos samemu uczysz sie o wiele szybciej niz wtedy gdy kozystasz z gotowych, cudzych rozwiazan.

Co do zademonstrowanego przez Ciebie fragmentu kodu mam jednak kilka uwag.
  1. <?php
  2.  
  3. $polecenie3 = mysql_query(&#092;"SELECT count(id), id FROM kategorie GROUP BY id ORDER BY kategoria\");
  4. while ($wynik3 = mysql_fetch_array($polecenie3, MYSQL_NUM)) {
  5. $download_ilosc = $wynik3[0];
  6. $kategorie[] = $wynik3[1];
  7. }
  8.  
  9. if ($download_ilosc > 0) {
  10.  
  11. ?>

Wykonywanie wbudowanej funkcji count() na kluczu podstawowym z uzyta klauzula GROUP BY na tym samym parametrze mija sie z celem poniewaz, jak w dym mozesz przyjac ze wyjdzie 1 (w koncu wartosci klucza podstawowego sa unikalne), no chyba, ze tabela jest pusta. Co za tym idzie warunek "if ($download_ilosc > 0)" jest bez sensu bo jesli tylko zapytanie zwroci wynik to ten warunek jest zawsze prawdziwy. Proponuje to zastapic kodem
  1. <?php
  2.  
  3. $polecenie3 = mysql_query(&#092;"SELECT id FROM kategorie ORDER BY kategoria\");
  4. if ($polecenie3==true) {
  5. while ($wynik3 = mysql_fetch_array($polecenie3, MYSQL_NUM)) {
  6.  $kategorie[] = $wynik3[0]; 
  7. }
  8. ?>

Jesli zamiast MYSQL_NUM uzylbys MYSQL_ASSOC dzialal by zapis:
$kategorie[] = $wynik3['id'];

Jesli uzylbys MYSQL_BOTH, ktory jest wartoscia domyslna
oba zapisy moglbys stosowac zamiennie, jak wygodniej.

Musisz koniecznie ale to naprawde koniecznie popracowac nad wlasciwym nadawaniem nazw funkcji i zmiennym bo w przeciwnym razie szybko sie pogubisz w swoim wlasnym projekcie.
  1. <?php
  2. function plik ($zmienna1, $zmienna2, $zmienna3)
  3. ?>

Nazwa funkcji powinna zawierac jakis czasownik bo przeciez funkcja cos robi, a ta konkretna funkcja tworzy link. Nazwij ja wiec np. tworzLink(). Poza tym co przechowuja zmienne: $zmienna1, $zmienna2, $zmienna3? Nazwa zmiennej powinna odzwierciedlac jej zawartosc.
  1. <?php
  2. foreach ($kategorie as $pokaz) {
  3. // pobieram odpowiednia nazwe kategorii dla danego id
  4. $polecenie4 = mysql_query(&#092;"SELECT kategoria FROM kategorie WHERE id = $pokaz\");
  5. ?>

Rozumiem, ze tablice w ktorej przechowujesz identyfikatory kategorii nazwales $kategorie ale dlaczego uzyles nazwy $pokaz dla zmiennej, ktora przechowuje pojedynczy identyfikator kategorii? Poza tym Twoj komentarz jest nieprawdziwy bo ty nie pobierasz nazw kategorii tylko identyfikatory kategorii, a tak na marginesie gdybys mial dobrze dobrane nazwy zmiennych to akurat w tym wypadku komentarz bylby zbedny.

Ten post edytował bigZbig 6.04.2005, 08:02:53
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 10:42