[PHP][MYSQL] Wyświetlanie danych z jednej tabeli |
[PHP][MYSQL] Wyświetlanie danych z jednej tabeli |
17.10.2008, 19:05:25
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.10.2008 Ostrzeżenie: (0%) |
Witam
Mam tabelę w bazie mysql w której są następujące kolumny: id, cytat, autor, zrodlo, tag; dane w kolumnach: autor, zrodlo, tag; mogą się powtarzać. Chciałbym pokazać listę autorów na daną literę wraz ze źródłami mniej więcej w ten sposób: autor1 - zrodlo1, zrodlo2, zrodlo3 autor2 - zrodlo, zrodlo4 autor3 - zr........ na razie zrobiłem coś takiego:
Co pokazuje mi listę autorów na daną literę przekazywaną przez GET i jest ok. Ale jak dołączyć do każdego autora jego źródła? Proszę o wskazówki |
|
|
18.10.2008, 09:26:43
Post
#2
|
|
Grupa: Zarejestrowani Postów: 274 Pomógł: 35 Dołączył: 18.07.2008 Skąd: Kielce Ostrzeżenie: (0%) |
Masz w jednej tabeli nazwiska autorów i ich cytaty itd... jeśli tak to najpierw poczytaj o tworzeniu baz danych (konkretne poszukaj o postaciach normalnych) ew. zapytaj na forum jak stworzyć taką bazę. Odpowiedź na pytanie możesz kombinować z union ale mało efektywne, i jeśli zastosujesz distinct to pojawi się problem baza danych wybierze tylko jeden rekord resztę uzna za takie same. Lepiej zmień bazę danych
-------------------- "Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein Wirtualny Rynek Predykcyjny |
|
|
18.10.2008, 15:17:38
Post
#3
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 7 Dołączył: 12.09.2008 Skąd: localhost Ostrzeżenie: (0%) |
Witam Mam tabelę w bazie mysql w której są następujące kolumny: id, cytat, autor, zrodlo, tag; dane w kolumnach: autor, zrodlo, tag; mogą się powtarzać. Chciałbym pokazać listę autorów na daną literę wraz ze źródłami mniej więcej w ten sposób: autor1 - zrodlo1, zrodlo2, zrodlo3 autor2 - zrodlo, zrodlo4 autor3 - zr........ [CUT]
Nie testowałem, ale z zasady powinno działać bez zarzutu. Ana, wszelkie encapsy i slashe pominąłem dla przejrzystości. Ten post edytował HellRider 18.10.2008, 16:03:30 |
|
|
19.10.2008, 16:07:00
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.10.2008 Ostrzeżenie: (0%) |
dzięki wielkie
webasek: W sumie zdaję sobie z tego sprawę że powinienem mieć wszystko w innych tabelach i kiedyś tak będę musiał zrobić. Na razie jednak tabela o której mowa używana jest (i stworzona też) przez plugin wp-quotescollection w wordpressie - ja po prostu chciałem się podłączyć innym skryptem do tej tabeli. Niestety nie przychodzi mi do głowy jak użyć UNION w takiej sytuacji choć już trochę poczytałem o tym złączeniu. HellRider: Twoje rozwiązanie zadziałało - nie użyłem co prawda:
bo nie wiedzieć czemu nie działało to u mnie, a zadziałało:
w manualu bowiem przeczytałem o powyższych funkcjach: Cytat Godne uwagi jest to, że użycie mysql_fetch_assoc() nie jest znacząco wolniejsze od użycia mysql_fetch_row(), a jest bardziej funkcjonalne. cokolwiek to znaczy??W sumie wyszło mi coś takiego:
Mam jeszcze pytanie o szybkość i obciążenie serwera dotyczące tych zapytań do bazy (jak już webasek wspomniał jedna tabela nie jest najszczęśliwszym rozwiązaniem) i czy rzeczywiście użycie mysql_fetch_assoc($res) zamiast mysql_fetch_row($res, MYSQL_ASSOC) (to nie działa) nie spowolni takiego zapytania? Dodam że na razie w tablicy jest ok 4k rekordów a będzie 2x tyle. jeszcze raz dzięki |
|
|
20.10.2008, 03:45:57
Post
#5
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 7 Dołączył: 12.09.2008 Skąd: localhost Ostrzeżenie: (0%) |
Oj, pomyliłem funkcje, nie chodziło mi o
mysql_fetch_row($res, MYSQL_ASSOC) tylko o mysql_fetch_array($res, MYSQL_ASSOC), ups Działa bez zarzutu. EDIT: Przez PHP jest to chyba najpopularniejsza metoda wyciągania danych SQL SELECT. Aplikacje zazwyczaj nie wyciągają 4000 czy 8000 rekordów z bazy prosto na stronę, lecz filtrują i wyciągają te właściwe, u Ciebie np. autor na $litera i tylko źródła = $autor. Ten post edytował HellRider 20.10.2008, 05:25:33 |
|
|
20.10.2008, 11:48:49
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.10.2008 Ostrzeżenie: (0%) |
poprawiłem funkcję na mysql_fetch_array($res, MYSQL_ASSOC) i śmiga
Chodzi mi o ilość zapytań do bazy - proszę mi powiedzieć czy dobrze myślę: są dwa zapytania $res i $res2 zapytanie $res2 jest wykonywane w pętli "while" czyli ile wyników zwróci zapytanie $res tyle razy będzie wykonywane zapytanie $res2 czyli zapytań do bazy będzie bardzo dużo?? Czy nie zablokuje mi to serwera baz danych na jakimś tam wirtualnym hostingu gdzie mam podwieszone jeszcze inne skrypty które odpytują bazę?? |
|
|
20.10.2008, 14:01:36
Post
#7
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 7 Dołączył: 12.09.2008 Skąd: localhost Ostrzeżenie: (0%) |
Jeżeli szukasz na literę "a" i masz trzech autorów, każdy autor ma 5 źródeł to wykona się to tyle razy:
(3 x autor) x (5 x źródło) ---- 15 // Prosta matematyka. Hm, czy zablokuje, nie powinno, fora, takie jak forum.php.pl, wykonują kilka zapytań na jedno odświeżenie strony, pomnóż to razy ilość odświeżeń na minutę w godzinach szczytu, IP.Board potrafi generować masę zapytań, a wiele for śmiga elegancko To przykład, musisz dowiedzieć się jakie możliwości ma Twój serwer oraz jakie restrykcje nakłada, ale nie panikuj, bo jak serwer MySQL Ci przy tych dwóch while nie wytrzyma, to zmień serwer. Ten post edytował HellRider 20.10.2008, 14:02:05 |
|
|
20.10.2008, 14:31:16
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.10.2008 Ostrzeżenie: (0%) |
No tak ale ja mam 30 autorów na a, każdy z nich ma po 5-10 źródeł czyli może być do 300 zapytań na jedno odświeżenie strony.
do tego nosiłem się z zamiarem żeby w ten sam sposób zrobić pobieranie tagów do każdego autora i tu też będzie dużo zapytań, czyli dochodzi następne 300. Pytam dlatego że parę razy już serwer baz wyrzucił mi komunikat że nie jest dostępny. a do tej pory pracowało tam parę serwisów na joomli i oscommerce całość ok 1k uu dziennie i nie było problemów (większych ) |
|
|
20.10.2008, 16:01:33
Post
#9
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) |
Słuchaj to jak już się tak bawisz w słuchanie wyżej wypowiadających się panów to ja polecam na każdą kolumnę zrobić osobne zapytania...
Tym sposobem zapytanie jedno. |
|
|
20.10.2008, 21:53:39
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.10.2008 Ostrzeżenie: (0%) |
goload:
Cytat #i tu tworzysz oddzielenie dla nowego autora ktorego wypisujesz tylko raz Sęk w tym że nie wiem jak wypisać raz danego autora (wcześniej załatwiałem to poprzez "DISTINCT") Cytat #a tu wyswietlasz reszte rzeczy A tu pewnie jak wyżej Dzięki za notkę o bezpieczeństwie |
|
|
21.10.2008, 09:12:06
Post
#11
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) |
Rozumiem, że troszkę u Ciebie słabo z rozeznaniem w temacie. Nie wiem tylko czy zauważyłeś ale napisałem Ci jako takie rozwiązanie. Czyli jedno zapytanie i jak je wyświetlać. Skoro masz jednak problem, zrobię to jeszcze raz.
No chyba to juz wystarczajaca ilosc kodu prawda ? zmien tylko wiersz['dzielo'] na odpowiedni dla Twojej kolumny z dzielem. |
|
|
21.10.2008, 20:25:35
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.10.2008 Ostrzeżenie: (0%) |
golaod:
Cytat Rozumiem, że troszkę u Ciebie słabo z rozeznaniem w temacie. Wiadomo, tak sobie kombinuję trochę. Myślałem że już sobie poradzę ale jednak nie. Zastosowałem ten algorytm który podałeś w ostatnim poście (z drobną zmianą bo pierwszy wiersz był pusty - zadziałało przesunięcie tego na początek pętli if Wydawało mi się że żeby wyświetlić dane źródło tylko raz; zastosuję sposób który podałeś mi na tacy przy wyświetlaniu raz danego autora - jednak z kolumną autor to się udało bo jest ona sortowana ASC i autorzy są po kolei - kolumna źródło jednak jest posortowana według kolumny autor i ten sam sposób jednak nie wychodzi. Może jakaś wskazówka? please. hmm może jak posortować kolumnę source by wyświetlić raz dane źródło w ten sam sposób jak "autora" - a może zupełnie inaczej? |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 13:17 |