Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Rekomendowane odpowiedzi

Opublikowano

Cześć,
 
Mam mały problem. Chciałbym zrobić paginację, która sortuje wyniki z tabeli, która ma inny prefix niż forum.
Tworzę zapytanie za pomocą $this->DB->build, jednak domyślnie IP.Board dodaje do zapytania prefix tabel, pobierany z konfiguracji.
Czy jest możliwość obejścia tego?

 

		$this->DB->build( array(
							'select' => '*',
							'from' => 'm_tabela',
							'order' => 'id ASC',
							'limit'  => array( $this->request['st'], 10 )
							)
						);

 

 

Powyższy kod zamienia na ipb_m_tabela.

 

Opublikowano (edytowane)

No cóż...

Więc tak, otwierasz plik ips_kernel\classDbMysql.php

Szukaj:

	protected function _buildSelect( $get, $table, $where, $add_join=array(), $calcRows=FALSE )
	{

Zamień na:

	protected function _buildSelect( $get, $table, $where, $add_join=array(), $calcRows=FALSE, $prefix = null )
	{

Szukaj:

$_calcRows = ( $calcRows === TRUE ) ? 'SQL_CALC_FOUND_ROWS ' : '';

Dodaj PO:

$prefix = ($prefix == null ? $this->obj['sql_tbl_prefix'] : $prefix); 

Szukaj:

$_tables[] = $this->obj['sql_tbl_prefix'] . $tbl . ' ' . $alias;

Zamień na:

$_tables[] = $prefix . $tbl . ' ' . $alias;

Szukaj:

			else
			{
				$table	= $this->obj['sql_tbl_prefix'] . $table;
			}

Zamień na:

			else
			{
				$table	= $prefix . $table;
			}

Zapisz plik i wyślij.

Otwórz plik ips_kernel\classDb.php

Szukaj:

    public function build( $data )
    {

Zamień na:

    public function build( $data, $prefix = null )
    {

Szukaj:

$this->_buildSelect( $data['select'], $data['from'], isset($data['where']) ? $data['where'] : '', isset( $data['add_join'] ) ? $data['add_join'] : array(), isset( $data['calcRows'] ) ? $data['calcRows'] : '' );

Zamień na:

$this->_buildSelect( $data['select'], $data['from'], isset($data['where']) ? $data['where'] : '', isset( $data['add_join'] ) ? $data['add_join'] : array(), isset( $data['calcRows'] ) ? $data['calcRows'] : '', $prefix );
Zapisz plik i wyślij.

Teraz przy zapytaniu:

		$this->DB->build( array(
							'select' => '*',
							'from' => 'm_tabela',
							'order' => 'id ASC',
							'limit'  => array( $this->request['st'], 10 )
							)
						);

Dodajesz argument do funkcji np:

		$this->DB->build( array(
							'select' => '*',
							'from' => 'm_tabela',
							'order' => 'id ASC',
							'limit'  => array( $this->request['st'], 10 )
							), 'moj_nowy_prefix'
						);
Edytowane przez Macsch15
Opublikowano

Mógłbyś przedstawić jak mógłbym wykonać? Dokładnie chodzi mi z tym limitem "'limit' => array( $this->request['st'], 10 )".

 

 

SELECT * FROM a_tabela ORDER BY uid ASC LIMIT {...}

 

 

  • Manager
Opublikowano

To sprawdź jakie wartości przyjmuje st, debuguj. Samo się to nie zrobi. To PHP, nie ma cudów - albo działa albo nie i trzeba szukać fragment po fragmencie powodu.

 

P.s. jak się ma tytuł tego wątku do aktualnie omawianej sprawy? :)

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

W sumie to jest powiązane właśnie z paginacją, jednak problem mam z zapytaniem do bazy.

St nie przyjmuje żadnej wartości "LIMIT ,10". A gdy zrobione jest przez $this->DB->build, działa jak należy. Ale to mi nie odpowiada, ponieważ chcę posiadać inny prefix tabeli.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.