Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> pobieranie danych |różne tabele | inner joiny | funkcje php
RysQ
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 3
Dołączył: 11.06.2015

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


Pytanie w sumie trochę z PHP trochę z MySQL, a trochę ogólne.

Mam tabele w bazie w których powiązania robię po INT ~id~.

np:
articles.author_id - user.id
articles.category - category.id

itp itd

Często mam potrzebę pobrania danych, które znajdują się w różnych tabelach - normalne.
Przykładowo jest artykuł, pobieram wszystkie dane, no i przydałyby się także dane autora.

Mam jego id (np author_id z tabeli articles), ale przydała by się także nazwa

Co byście radzili w tej sytuacji?
dwa przypadki:
1. potrzebuję tylko nazwę tego usera (np do jej wyświetlenia) - reszta mnie nie obchodzi
2. potrzebuję więcej danych niż tylko nazwa (np potrzebuje nazwę, avatar, datę rejestracji i ostatniej wizyty - jak np na forum)

Przypadek 1
-----------------------
a.) Pobieram nazwę usera (np user.name) korzystając z INNER JOIN
b.) używam jakiejś funkcji, która pobierze tą nazwę np :

  1. foreach ($posty as $post) {
  2. echo 'tytuł: '.$post['title'].' autor: '.user->getUser('name', $post['author_id']);
  3. }


c.) Nic nie łącze , nie używam żadnych funkcji. Klucze obce robię na zasadzie articles.author - user.name (varchar - czyli mam gotowego stringa z nazwą usera w tabeli articles),
a ponieważ używam InnoDB mogę sobie użyć ON UPDATE, ON DELETE - CASCADE i nie przejmuje się co będzie jak user zmieni nazwę

Przypadek 2
-----------------------
a.) Jak w przypadku 1. Łącze tabele JOINem pobierając resztę danych
b.) używam sobie funkcji w taki sposób

  1. foreach ($posty as $post) {
  2. $user = user->getUser($post['author_id']); // i tutaj pobrałem całego usera, a nie tylko nazwę
  3. echo 'tytuł: '.$post['title'].'<br>'.$post['content'].'<br>
  4. autor: '.$user['name'].$user['img_path'].$user['last_login].$user['phone']; // itp itd
  5. }

c.) W przeciwieństwie do c - przykład 1 , tutaj trzeba coś złączyć/wydobyć dodatkowe dane. Więc klucze obce lepiej pewnie zrobić na intach ze względu na wygodę i oszczędność miejsca. Czyli napisałem sobie ten podpunkt w związku z niczym.

Ewentualnie jakie inne rozwiązanie byście polecili?

Edit:

W sumie w nawiązaniu do powyższych -rozwiązanie (IMG:style_emoticons/default/cool.gif) - co myślicie o ustawieniu w kontrolerze obiektu jako pola w widoku ? :

tzn:

  1. mojKontroler() {
  2. $view->setData('ob_user', New User);
  3. $view->setData('articles', $dane_z_artykulami);
  4. }


i później w widoku w jakimś szablonie artykuly.html
  1. $this->ob_user->getUserName($articles['user']);


Ten post edytował RysQ 11.06.2015, 14:33:54
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: 26.12.2025 - 00:16