Jump to content
  • 0

Zapytanie Select z AND


Go to solution Solved by Spanner,

Question

Cześc. Mam problem z zapytaniem SELECT , a mianowicie nie wiem jak mogę użyć AND w zapytaniu, a nigdzie nie mogę się doszukać jak powinno wyglądać takie zapytanie.

Tutaj moje aktualne zapytanie :

$res = \IPS\Db::i()->select('*', 'cms_custom_database_'.$_db, array('field_'.$_kto.'=?', ' ' . $member['member_id'] . '' ' AND field_' . $_ser . ' = ' . $result['field_'.$_ser] .  ''));

 Ale niestety nie działa

Link to post
Share on other sites

24 answers to this question

Recommended Posts

  • 0
  • Administrator
  • Solution

Bo jest źle 🙂

$where = array();
$where[] = array( "field_{$_kto}=?", $member['member_id'] );
$where[] = array( "field_{$_ser}=?", $result['field_'.$_ser] );

$res = \IPS\Db::i()->select('*', 'cms_custom_database_'.$_db, $where);

 

  • Thanks 1
Link to post
Share on other sites
  • 0
  • Administrator

Raczej nie mój kod, tylko to co z nim robisz. Ja wkleiłem Ci konstrukcję i to jest dobre zapytanie, ale co tam wstawiasz to nie wiem

Link to post
Share on other sites
  • 0

Zapytałem jak użyć konstrukcji AND w kodzie, więc oczekiwałem poprawnej odpowiedzi tym bardziej, że podałem swój aktualny kod zapytania. A  tego co Ty napisałeś to wszystko jest to co mam w swoim zapytaniu, więc nic innego tam wstawić nie mogę. 

Link to post
Share on other sites
  • 0
  • Administrator

I dostałeś poprawną odpowiedź. Ale ja nie wiem co się znajduje w poszczególnych zmiennych. Co robisz z tym zapytaniem itp.

Link to post
Share on other sites
  • 0

$_kto = 42 - nazwa pola w bazie;

$member['member_id'] = id aktualnie zalogowanego usera

$_ser = 46 - nazwa pola w bazie;

$result['field_'.$_ser] = wartość z bazy pola o nazwie 46

 

Edited by Mateusz_K
Link to post
Share on other sites
  • 0
  • Administrator

Rozumiem, że w tym $result masz dane z innego zapytania?

Co później robisz z tym kodem w którym pomagałem?

Link to post
Share on other sites
  • 0

Tak, dane z innego zapytania : 

$result = \IPS\Db::i()->select('*', 'cms_custom_database_' . $_db, array('field_' . $_kod . '=?', '' . $_POST['bc_code'] . ''))->first();

Ogólnie jak zadeklaruje tylko te zmienne : 

$where = array();
$where[] = array( "field_{$_kto}=?", $member['member_id'] );
$where[] = array( "field_{$_ser}=?", $result['field_'.$_ser] );

To wywala 500tke ;/ . 

Link to post
Share on other sites
  • 0
  • Administrator

a jak podstawisz za {$_kto} właściwe wartości to jest ok? jeśli tak to spróbuj konstrukcji na zasadzie

$where = array();
$where[] = array( 'field_' . $_kto .'=?', $member['member_id'] );
$where[] = array( 'field_' . $_ser .'=?', $result['field_'.$_ser] );

 

Link to post
Share on other sites
  • 0
  • Administrator

No to coś masz nie tak. Skąd bierzesz ten $member? Bo prawidłowo powinno być \IPS\Member::loggedIn()->member_id

Link to post
Share on other sites
  • 0

Błąd był oczywiście w moim kodzie, powinno być $member->member_id , bo $member jest obiektem w moim przypadku a nie tablicą. 

Teraz jest niby okej, ale zapytanie nie zwraca mi danych z bazy tylko coś innego , jakieś klucze typu  ["connect_errno"]   

 

Link to post
Share on other sites
  • 0
  • Administrator
1 minutę temu, Mateusz_K napisał:

Błąd był oczywiście w moim kodzie, powinno być $member->member_id , bo $member jest obiektem w moim przypadku a nie tablicą. 

A już do mnie pretensje, że zły kod podaję 🙂

ale lecisz pętlą po wynikach? connect_errno to są błędy w połączeniu z bazą

Link to post
Share on other sites
  • 0

Hehe, sorka ;).

Znaczy connect_errno zwraca 0 więc nie ma błędu z połączeniem. 

Wydaje mi się, że błąd może być w zapytaniu : 

$res = \IPS\Db::i()->select('*', 'cms_custom_database_'.$_db, $where);

Czy nie mam racji ? 

Edited by Mateusz_K
Link to post
Share on other sites
  • 0
  • Administrator

Zapytanie jest ok, ale powinieneś je obrobić w pętli czyli:

foreach( \IPS\Db::i()->select('*', 'cms_custom_database_'.$_db, $where) as $row )
{
	$row....
}

albo

$res = \IPS\Db::i()->select('*', 'cms_custom_database_'.$_db, $where);

foreach( $res as $row )
{
	$row...
}

 

Link to post
Share on other sites
  • 0
  • Administrator

to coś innego masz źle. Jeśli byłyby wyniki to by je zwrócił, jeśli byłby błąd w zapytaniu to poleciał by wyjątek przy pobieraniu pierwszego wiersza wyników. A skoro pętla nie przechodzi to znaczy że wyników nie ma

Link to post
Share on other sites
  • 0
  • Administrator

zamieniasz

$where = array();
$where[] = array( 'field_' . $_kto .'=?', $member['member_id'] );
$where[] = array( 'field_' . $_ser .'=?', $result['field_'.$_ser] );

na takie coś:

$where = array();
$where[] = array( '(field_' . $_kto .'=? OR field_' . $_ser .'=?)', $member['member_id'], $result['field_'.$_ser] );
$where[] = array( ...  );

a zamiast ... możesz wstawić kolejny warunek i wszystko zostanie złączone AND'em

Link to post
Share on other sites
  • 0

Git, dzięki.

Nagle przestał działać mi poprzedni kod : 

$where = array();
$where[] = array( "field_{$_kto}=?", "66587" );
$where[] = array('field_'.$_ser.'=?', ''.$result['field_'.$_ser].'' );

$res = \IPS\Db::i()->select('*', 'cms_custom_database_'.$_db, $where);

Dane które podałem zgadzają się z tymi z bazy danych w 100% , a i tak zapytanie $res nie zwraca danych z bazy. W czym może być problem ? 

Edited by Mateusz_K
Link to post
Share on other sites
Guest
This topic is now closed to further replies.
  • Dołącz do pierwszego newslettera Invision Community

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.