![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 3 Dołączył: 29.12.2008 Skąd: osada koczownika :P Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam pewien problem ze złączeniem typu CROSS JOIN w mysqli, a do tego wynik jest przesyłany do Smarty. Oto moje zapytanie (oczywiście działa i dobrze się ma) Kod SELECT * FROM news CROSS JOIN admin CROSS JOIN kat_news WHERE news.id_login = admin.id ORDER BY news.data AND news.id_kat = kat_news.id AND slider = '0' DESC LIMIT 4 Następnie dane trafiają do SMARTY poprzez: $smarty->assign("news", $news); W pliku .tpl mam Kod {foreach item=news from=$news} <div class="news"> <a class="news" href="nowosc,{$news.id},{$news.tytul|lower|nl2br|strip_tags|replace:' ':'_'}"> <span class="ngnews"> {$news.tytul|nl2br|strip_tags} </span> </a> </div> {/foreach} To także działa - wyniki wyświetlają się poprawnie oprócz małego niuansu. W linku nowosc,IDNEWSA,TYTUL_NEWSA -> zamiast IDNEWSa wyświetla się ID kategorii newsa ze złączenia. Próbowałem modyfikować zapytanie lecz nieskutcznie. Może ktoś ma jakiś lepszy sposób? Proszę o konsultację. (IMG:style_emoticons/default/biggrin.gif) Życzę miłego wieczoru. Pozdrawiam, Robert. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Można zmienić id w nazwie tabeli, ale później grzeb sobie po plikach gdzie już tej nazwy kolumny użyłeś i zmieniaj (IMG:style_emoticons/default/winksmiley.jpg) Sam alias to tylko zmiana nazwy kolumny, co nie jest obciążające dla bazy. W końcu nazywasz kolumnę tylko raz i potem zapominasz o tym. Ciekawostka dla Ciebie może być fakt, że aliasu możesz używać w dalszej części zapytania jakby był nazwą normalną, czyli równoznaczny z nazwa(alias)_tabeli.pole_tabeli .
Aha i zrobiłem mały błąd w ostatnim poście. Ma być ORDER BY n.id, a nie samo id, by uniknąć problemów. Zresztą zaraz post wyedytuję (IMG:style_emoticons/default/winksmiley.jpg) EDIT: Jeszcze jedno... left join zawsze wyświetli wyniki, nawet jeśli w dołączanej tabeli nie znajdzie niczego po połączeniu. Na przykład news był napisany przez usera, którego usunąłeś z bazy lub z usuniętej kategorii i tym samym takie id w drugiej tabeli już nie istnieją. Wtedy pola w brakujących kolumnach uzupełni wartościami NULL. W takim przypadku po odebraniu danych sprawdź owe pola i jeśli napotkasz wartości puste przypisz podczas wyświetlania wyniku na stronie "Użytkownik usunięty" lub "Kategoria została usunięta". W przypadku Smarty możesz to zrobić albo poprzez sprawdzenie danych zaraz po odebraniu z bazy lub dopiero w template, piszac dodatkowy warunek IF (IMG:style_emoticons/default/smile.gif) Ten post edytował thek 23.08.2009, 11:32:47 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 18:06 |