![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 1 Dołączył: 13.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam takie zapytanie:
Służy do wylistowania / wyszukania artykułów dla danej kategorii. Dodatkowo zwraca mi dodatkowe informacje o dodającym oraz o osobie, która jako ostatnia edytowała artykuł (edytować może autor lub administrator), m.in to czy dodający lub ostatni edytujący jest administratorem, czy też zwykłym użytkownikiem. Oczywiście zamiast tego zera przy limicie pojawia się odpowiedni offset (IMG:style_emoticons/default/winksmiley.jpg) Dla testu dodałem ok. 1000 artykułów do bazy. Niestety zapytanie zbyt długo się wykonuje, a i tak testuję to tylko na localhoście. Czas więc zoptymalizować składnię zapytania o ile się da no i dodać indeksy. Tabela artykułów:
Pole member_username w tabeli members:
I pytanie tak na marginesie - stosować słówko AS w zapytaniach czy lepiej skrócony zapis bez tego słowa kluczowego? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Podzapytania w liście pól wykonują się dla każdego wiersza tabeli 'articles'. Pora zapoznać się ze złączeniami.
Kod <pre> SELECT
SQL_CALC_FOUND_ROWS a.article_id, a.article_status, a.article_views, a.article_date_added, a.article_date_modified, a.article_desc, a.article_adder, a.article_last_changer, a.article_name, ad.member_level as `adder_level`, alc.member.level as `last_changer_level` FROM articles as `a` INNER JOIN members AS ad ON LOWER(ad.member_username)=LOWER(a.article_adder) INNER JOIN members AS alc ON LOWER(alc.member_username)=LOWER(a.article_last_changer) WHERE a.article_category_id=1 -- tu odpowiednie Id ORDER BY a.article_date_added DESC LIMIT 0,20; Ten post edytował Mchl 20.02.2010, 17:18:26 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 01:37 |