![]() |
![]() |
![]()
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: i tak dalejnazwa_pliku | opis_pliku | wielkosc_pliku nazwa_kategorii2: nazwa_pliku | opis_pliku | wielkosc_pliku 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. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 4.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
napisz to co sam wymyśliłeś, mam pewną propozycję ale chciałbym zobaczyć twój tok myślenia
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 0 Dołączył: 4.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
sorki, ze dopiero, ale probowalem jeszcze cos stworzyc i ostetecznie, zupelnie sie pogubilem.
mam tylko moje pierwsze rozwiazanie, reszta przepadla razem w probami, bo nie zapisuje tych, ktore i tak sa zle ... na poczatku robilem to tak: mialem wowczas jedna tabele - download i w niej byla kolumna kategoria, do ktorej wpisywalem wartosci liczbowe, np. 1,2,3,4,... a potem mialem taki skrypcik php: prymitywnie - wiem. chce to zrobic lepiej, ale nie moge sobie poradzic ... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Proponuje abys zrobil takie zapytanie
Tak na marginesie, kto ci wymyslil takie nazwy tabel i pol w tabelach? Nie prosciej byloby: kategorie 1. id_kategorie //najlepiej aby nazwa klucza podstawowego zawierala nazwe tabeli 2. nazwa //albo nazwa_kategorii pliki 1. id_pliki 2. id_kategorie //od razu widac ze to jest klucz obcy 3. nazwa 4. opis 5. wielkosc -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 0 Dołączył: 4.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
to znaczy, to co podalem w pierwszym poscie - nazwy tabel i kolumn, to czytac nalezy bez tych nawiasow.
to, ze dobrze jest nazywac klucze obce i glowne np. id_kategorie, to wiem, no ale tak jakos sobie utrudniam zawsze ![]() no ale zmienilem juz nazwy kolumn: download: - id - kategoria - nazwa - opis - wielkosc kategorie: - id - kategoria twoje zapytanie dziala i nawet je rozumiem, ale nie wiem, jak mam je wykorzystac, aby wyswietlic je juz na stronie w takiej formie, jakbym chcial. poza tym, zwraca mi wszystkie rekordy, nie wiem, czy o to chodzi ... w formie uproszczonej chodzi mi o cos takiego: Kod nazwa kategorii1 nie wiem, jak to zrobic w php.wyswietlenie wszystkich plikow z tej kategorii nazwa kategorii2 wyswietlenie wszystkich plikow z tej kategorii itd. w tabelke wsadzic to zaden problem, ale nie wiem, jak wyswietlic ![]() E D I T : wymyslilem cos, tylko zastanawiam sie, czy mozna to jakos skrocic. ja niestety nie mam zadnych pomyslow ...
Ten post edytował hmmm 5.04.2005, 19:13:04 |
|
|
![]()
Post
#6
|
|
![]() 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.
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
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.
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.
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 -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 0 Dołączył: 4.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
dziekuje za wszystkie uwagi
![]() nauka nie pojdzie w pole i na pewno skorzystam z niej. mam tylko jedno zastrzezenie do podanych przez ciebie rozwiazan, mianowicie do pierwszego. napisales warunek ale mi nie chodzi o to, czy polecenie wykona, czy nie, tylko o ilosc elementow w tablicy i zaleznosci od tego, ma wyswietlic albo kategorie i pliki, albo wiadomosc, ze nie ma zadnych plikow. nie wiem, czy dobrze kombinuje, ale jezeli ilosc id bedzie rowna zero, czyli nie bedzie kategorii, a polecenie zostanie wykonane to i tak $polecenie3 bedzie rownalo sie true. napisalem cos takiego:
z dalszej lektory rozumiem, ze wcale nie musze pisac MYSQL_NUM, tylko nazwe zmiennej i potem w petli while bede sie odwolywal albo do nazw, albo do numerow ... a to nowy, poprawiony skrypt:
Ten post edytował hmmm 6.04.2005, 19:50:53 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 09:34 |