Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL][ZEND PHP] Sortowanie tabeli według innej.
Cross77
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 6.02.2013

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


Mam dwie tabele. Pierwsza z nich posiada listę użytkowników:

ID | NICK | PASS | EMAIL

Druga zaś posiada opis rang dla poszczególnych ID z tabeli pierwszej (Ranga to integer 1-2):

ID | RANG

Wykorzystuję Zend PHP :

  1. $dbu = new Application_Model_DbTable_Users();
  2. $dbr = new Application_Model_DbTable_Rangs();
  3. $sort = $this->getRequest()->getParam('sort');
  4. //sort ma mieć w tym przypadku string : rang
  5. //w przypadku gdy jest to ID lub NICK to standardowo używam :
  6.  
  7. switch($sort){
  8. case 'id': $sql = $dbu->select()->order('id');
  9. break;
  10. case 'nick': $sql = $dbu->select()->order('nick');
  11. break;
  12. case 'rang': // brak pomysłu
  13. break;
  14. default: $sql = $dbu->select()->order('id');
  15. }
  16.  
  17.  
  18. $this->view->Users = $dbu->fetchAll($sql);
  19. $this->view->Rangs = $dbr->fetchAll();


Chcę posortować najpierw tablicę z rangami według kolumny RANG, a następnie posortować tablę z użytkownikami według kolejności kolumny ID w tablicy z rangami.

Ten post edytował Cross77 6.02.2013, 13:50:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
wiiir
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


  1. $sql = $dbu->select()->order(array('RANG','ID'));


W ZF2
  1. $select = new Select;
  2. $select->order('RANG, ID')



Ten post edytował wiiir 6.02.2013, 18:50:17
Go to the top of the page
+Quote Post
Cross77
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 6.02.2013

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


Chyba nie tędy droga..
Kod
Message: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'RANG' in 'order clause'


w $dbu jest lista użytkowników, a rangi są w $dbr.

Tabele wyglądają następująco:

Kod
$dbu :

ID    | NICK   | PASS | MAIL
1     | Adam   | SU   | admin@site.eu
2     | Marcin | SU   | user@site.eu
3     | Jerry  | SU   | mod@site.eu
4     | Tom    | SU   | admin@site.eu
5     | Kasia  | SU   | user@site.eu

$dbr :

ID   | RANG
1    | 1
3    | 2
4    | 1

//1 - ADMIN | 2 - MOD


1. Trzeba posortować $dbr według Rangi. W tym przypadku 1, 1, 2.
2. Należy posortować $dbu według kolejności ID w posortowanym $dbr. Będą to tutaj id z $dbu: 1, 4, 3 i reszta to są użytkownicy więc już dalej według id lub alfabetycznie według nicku.

Ten post edytował Cross77 6.02.2013, 22:44:50
Go to the top of the page
+Quote Post
wiiir
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Cytat
w $dbu jest lista użytkowników, a rangi są w $dbr.


No i co z tego ?

Napisz dobre zapytanie select i uzyj tego co ci podalem
Go to the top of the page
+Quote Post
Cross77
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 6.02.2013

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


Nie zbytnio rozumiem..
Mam poprawić dbu na dbr? Bo tym bardziej raczej nie zadziała (IMG:style_emoticons/default/tongue.gif)
  1. $sql = $dbr->select()->order(array('RANG','ID'));
  2. $this->view->Users = $dbu->fetchAll($sql);


Kod
Message: Specified column "nick" is not in the row


Czy najpierw wykonać zapytanie z sortowaniem do tabeli $dbr, a następnie odczytać kolejno id (np. 1,4,3) i przy zapytaniu do $dbu podać by pierwsze rekordy były z id 1,4,3, a reszta id rosnąco?

Ten post edytował Cross77 6.02.2013, 23:13:13
Go to the top of the page
+Quote Post
wiiir
post
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


pokaz swoje zapytanie sql

chyba ze poprostu robisz po przez select() - select * from dbr?

jakie masz łączanie miedzy tabelami?
Go to the top of the page
+Quote Post
Cross77
post
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 6.02.2013

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


Cały skrypt php mojej akcji jest w pierwszym poście, a tablice w mysql w kolejnym.
Go to the top of the page
+Quote Post
wiiir
post
Post #8





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


  1. $db = Zend_Db::factory(...);
  2. $select = $db->select()
  3. ->from(array('u' => 'dbu'))
  4. ->join(array('r' => 'dbr'),
  5. 'u.id = r.id')
  6. ->order(array('r.rang','u.id'));

Naprawde tak ciężeko napisać złączenie?

Ten post edytował wiiir 7.02.2013, 21:40:54
Go to the top of the page
+Quote Post
Cross77
post
Post #9





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 6.02.2013

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


Wszystko działa według oczekiwań, prócz tego, że wyświetlają się tylko te rekordy które mają jakąś grupę jednak już sobie dalej poradzę.
Dziękuję za pomoc.

Ten post edytował Cross77 7.02.2013, 23:45:07
Go to the top of the page
+Quote Post
wiiir
post
Post #10





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Wobec tego
  1. ->joinLeft()
Go to the top of the page
+Quote Post

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: 22.08.2025 - 15:43