Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Łączenie wyników z dwóch baz
Forum PHP.pl > Forum > Przedszkole
daggerski
Witam robię sobie katalog firm. Utknąłem w momencie który opiszę poniżej. (przy okazji, używam frameworka kohana)


Mianowicie dodając firmę przyporządkowuje ją do odpowiednich kategorii.

W bazie mam 3 tabele:

firmy: tutaj wszelkie info o firmie
categories: wszystkie kategorie (catID, categoryName)
companycategories: tutaj jest tabela łącząca firmę z kategoriami. Dodając firmę do companycategories dodawane jest ID firmy(takie samo jak w tabeli firmy), id kategori(takie samo jak w categories) categoryName(też takie samo jak w categories) no i nazwa firmy (taka sama jak w firmy)

Zrobiłem to w ten sposób bowiem uczyłem się pisania aplikacji opierających się na relacjach w bazie danych, i mam nadzieję że dobrze zrobiłem to czego sie uczyłem.

Teraz nie potrafię wyciągnąć i połączyć tych danych, wszystko prócz kategorii wyciągam poprzez zapytanie:

  1. public function get_all() {
  2. $sql = 'SELECT * FROM `firmy` ORDER BY `id`';
  3. return $this->_db->query(Database::SELECT, $sql, FALSE)
  4. ->as_array();
  5. }


Następnie controller:
  1. $result = $company->get_all();
  2. $this->template->companies = View::factory('page/panel/companies')->set('allcompanies', $result);



No i view:
  1. $c = count($allcompanies);
  2.  
  3. for($id=0;$id<$c;$id++) {
  4.  
  5.  
  6. if($allcompanies[$id]['token'] == 0) {
  7. $color='red';
  8. $submitcolor='green';
  9. $aktywacja='nie';
  10. $aktywdezaktyw = 'Aktywuj firme';
  11. $value = 1;
  12. } else {
  13. $color='green';
  14. $submitcolor='red';
  15. $aktywacja='tak';
  16. $aktywdezaktyw = 'Dezaktywuj firme';
  17. $value = 0;
  18. }
  19.  
  20.  
  21.  
  22. <div class="belka"><span class="b">Firma:</span> '.$allcompanies[$id]['name'].' | <span class="b">Data dodania:</span> '.$allcompanies[$id]['data'].' | <span class="b">Województwo:</span> '.$allcompanies[$id]['province'].' |
  23. <span class="b">Aktywowana:</span> <span style="color:'.$color.'">'.$aktywacja.' </span>| </div>
  24. <div class="firma">
  25. <ul id="zarzadzanie">
  26.  
  27. <li><a href="#" title="krotki'.$allcompanies[$id]['id'].'">Krótki opis</a></li>
  28.  
  29. <li><a href="#" title="dlugi'.$allcompanies[$id]['id'].'">Długi opis</a></li>
  30.  
  31. <li><a href="#" title="resztadanych'.$allcompanies[$id]['id'].'">Reszta danych</a></li>
  32. </ul>
  33.  
  34. //dalsza część................................................
  35.  
  36. </div>
  37.  
  38. '; }


No i teraz nie wiem jak poprawnie wyświetlić w tej pętli kategorie. W tablicy $allcompanies nie ma kategorii i wyciągam je tak:
  1. public function get_category() {
  2. $sql = 'SELECT companycategories.companyID, companycategories.companyName, categories.categoryID, categories.categoryName
  3. FROM companycategories, categories, firmy
  4. WHERE companycategories.companyID = firmy.id
  5. AND companycategories.catID = categories.categoryID
  6. ';
  7.  
  8.  
  9. return $this->_db->query(DATABASE::SELECT,$sql,FALSE)->as_array();
  10. }
  11.  
  12.  
  13. //controller
  14. $resultcats = $company->get_category();
  15. $this->template->companies = View::factory('page/panel/companies')->set('cats', $resultcats);
  16.  







Generalnie dla kogoś kto nie zrozumie kodu frameworkowego. W pliku wyświetlającym firmę mam dwie tablice.

$allcompanies oraz $cats

I nie mam pojęcia jak pętlą for wybrać info z tych obu tablic. O ile z jednej jest to bezproblemowe to nie wiem jak "dobrać" odpowiednie dane z tablicy $cats
na dodatek aby pętla z tablicy $cats wybierała tylko kategorie z tym samym ID co ID w allcompanies czyli:
$allcompanies[$id]['id'] = $cats[$id]['id']

Przepraszam za nieudolne wytłumaczenie. Z góry dziękuje i pozdrawiam.
jaslanin
po prostu użyj zapytania w stylu:

  1. SELECT
  2.  
  3. f.*,
  4. t.companyID,
  5. t.companyName,
  6. c.categoryID,
  7. c.categoryName
  8.  
  9. FROM firmy f
  10. JOIN companycategories t ON (f.id = t.companyID)
  11. JOIN categories c ON (t.catID = c.categoryID)
  12. ORDER BY f.id ASC


pisane z palca więc nie wiem czy się nie machnąłem albo źle zrozumiałem w każdym razie najpierw wykonaj zapytanie na terminalu albo w phpmyadmin czy działa itp, potem załóż indeksy odpowiednie na db

taka zabawa w łączenie tego co powinno być zrobione w bazie danych mija się z celem.

jak już koniecznie tak chcesz to poczytaj dokładniej o metodzie as_array bez dodatkowych parametrów zwraca ona tablice z kluczami 0, 1, 2 ,3. Żeby jako klucze zwracała id trzeba jej ustawić atrybut, tu masz więcej info:

http://kohanaframework.org/3.2/guide/database/results

Ogólnie też zainteresuj się pętlą foreach, oraz jak już raz wybierzesz konwencje nazywania zmiennych i kolumn to się jej trzymaj, dodatkowo jak wybierasz jezyk to pisz albo po polsku albo po angielsku, sam tak kiedyś mieszałem i to tylko prowadzi do problemów, lepiej po prostu pisać po angielsku. Odnośnie kolumn to np. raz używasz categoryID raz catID , czasami też id

odnośnie jeszcze samego pisania kodu z PHP z HTML to lepiej robić to tak:

  1. <div class="user_controls">
  2. <?php if ($user = Current_User::user()): ?>
  3. Hello, <em><?php echo $user->username; ?></em> <br/>
  4. <?php echo anchor('logout', 'Logout'); ?>
  5. <?php else: ?>
  6. <?php echo anchor('login','Login'); ?> |
  7. <?php echo anchor('signup', 'Register'); ?>
  8. <?php endif; ?>
  9. </div>
  10.  
  11. <h1>My Message Board</h1>
  12.  
  13. <?php foreach($categories as $category): ?>
  14.  
  15. <div class="category">
  16.  
  17. <h2><?php echo $category->title; ?></h2>
  18.  
  19. <?php foreach($category->Forums as $forum): ?>
  20.  
  21. <div class="forum">
  22.  
  23. <h3>
  24. <?php echo anchor('forums/'.$forum->id, $forum->title) ?>
  25. (<?php echo $forum->Threads->count(); ?> threads)
  26. </h3>
  27.  
  28. <div class="description">
  29. <?php echo $forum->description; ?>
  30. </div>
  31.  
  32. </div>
  33.  
  34. <?php endforeach; ?>
  35.  
  36. </div>
  37.  
  38. <?php endforeach; ?>


Inne podobne porady:
http://net.tutsplus.com/tutorials/html-css...-readable-code/

poczytaj też mój post: http://forum.php.pl/index.php?s=&showt...st&p=955502 może coś Ci się przyda
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.