![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam mały problem z zapytaniem. Załóżmy że mam dwie tabele, w jednej mam: id,obiekt a w drugiej inne_id i id_obiektu. Czyli tabele są połączone poprzez id obiektu. I teraz jeden obiekt może być kilka razy w drugiej.I teraz jak piszę:
to pobiera mi się tylko jedna wartość z drugiej tabeli a potrzebuję wszystkie. Proszę o pomoc. Ten post edytował grzes999 27.03.2012, 23:46:15 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A składnię join() i from() w Kohanie tyś widział?
Wersja 2.x http://docs.kohanaphp.com/libraries/database/builder#join Wersja 3.x http://kohanaframework.org/3.0/guide/datab...y/builder#joins Teraz popatrz, porównaj ze swoim. Ja już nawet literówek nie wypominam bo dwie widzę od razu... -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Widziałem i ten przykład pisałem na szybko i pominąłem i ja nie mam problemu z tym że mi zapytanie nie dzial tylko z tym że pobiera tylko jeden rekord z drugiej tabeli.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 673 Pomógł: 106 Dołączył: 31.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
1. popraw temat
2. wklej w takim razie twoje zapytanie to może poznamy przyczynę takiego, a nie innego zachowania -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Grześ... W takim razie z czym masz problem? Z ubraniem zapytania w query buildera Kohany (przy okazji która wersja?) czy z samym skleceniem zapytania? Jeśli to pierwsze to jeszcze od biedy temat tu może zostać, ale jeśli to drugie to trochę niezbyt prawidłowy dział wybrałeś
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Wersja Kohany 3.2 i zapytanie działa tylko z tej drugiej tabelipobiera mi tylko jeden rekord a nie wszystkie jakie są do danego id.
Moje zapytanie
Ewewntualnie może jakoś to rozbić na dwa zapytania tylko jak je póżniej połączyć ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Takie coś powinno wygenerować zapytanie:
SELECT tu_kolumny FROM ogloszenie_wyp JOIN ogloszenie ON ig_ogl = id_ogloszenia Pytanie się rodzi czy o takie Ci chodzi? Czy wrzucone prosto do bazy daje Ci rzeczywiście to co chcesz? Bo może to nie jest problem z Kohaną, ale nieprawidłowo utworzonym zapytaniem? Zrób debug zapytania jakie generuje query builder (jest przechowywane w obiekcie) i porównaj z tym, jakie chcesz uzyskać. Możesz się zdziwić czasem ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@grzes999 najpierw napisz sobie zapytanie z palca, takie które zwraca żądany wynik w PMA, a później do QB wpisuj.
i wklej do PMA -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Nie echo
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie echo ![]() Zadziała też, wiem bo sam tak robię z manuala
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
No i sprawdziłem i zapytanie jest takie jak chce i jeżeli wpisuje je ręcznie do bazy to otrzymuję to co chce. Może źle to wypisuje.
Ten post edytował grzes999 28.03.2012, 10:02:30 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A przypadkiem break w switch Ci nie kończy pętli foreach odrazu
![]() @down odpowiedz w formie pytania Ten post edytował skowron-line 28.03.2012, 11:43:20 -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@up:
No co Ty ![]() |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
A przypadkiem break w switch Ci nie kończy pętli foreach odrazu ![]() @down odpowiedz w formie pytania W takim razie w jaki sposób wykonać tylko te akcje, kótre chcę a nie wszystkie?? I jeszcze jedno pytanie bo teraz wyświetla mi kilka razy to samo. To znaczy jeżeli do jednego obiektu jest kilka rekordów w drugiej tabeli to wyświetla tle razy ile jest rekordów w tej drugiej tabeli. Można to jakoś ograniczyć. Wiem, że to jest bardziej pytanie z SQL ale nie będę już zakładał drugiego tematu. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Napisz co chcesz wyciągnąć z bazy, będzie prościej.
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
W bazie mam w jednej tabeli mam hotele a w drugiej tabeli wyposażenie dodatkowe takie ognisko,gril,wifi,parking,itd i chcę wyciągnąć wszystkie informacje o pokoju. Z podstawowymi nie ma problemu tylko z tymi dodatkowymi się troszkę meczę.
hotel id | gdzie | opis wyposazenie id_wyposazenia | co has_wyposazenie id_has | id_pokoju | id_wyposazenia Mniej więcej tak wygląda moja baza i niestety musi tak zostać bo jest częścią większej całości i nie opłaca się już przerabiać. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To w takim razie pchaj to jako tablicę, czyli where('pole', 'IN', TABLICA_Z_ID_WYPOSAŻENIA)
![]() U Ciebie nie jest bowiem JOINowanie problemem, ale kryterium wyszukiwawcze ![]() Twoje zapytanie więc to... 1. Jeśli jest podane w kryteriach wyposażenie dorób join na tabelę z wyposażeniem 2. Jeśli już zjoinowałes, dorzuć kryterium wyszukiwawcze, gdzie id_wyposażenia wybranego pchniesz jako tablicę do where('id_wyposazenia', 'in', $tablica_wybranych_id) 3. Dodatkowo pogrupuj to po id_pokoju lub id obiektu, zależnie co chcesz pokazać. Tu następuje rozwidlenie bo mozna do sprawy podejść na 2 sposoby: 4.1. Nie muszą wystapić wszystkie kryteria wyszukiwawcze, ale musi być trafione choć jedno. a. tylko order malejacy po zliczonej ilości różnych kryteriów (kilka pokoi w jednym obiekcie to kilka trafionych a ma być w takim wypadku zliczone jako 1 a nie kilka) 4.2. Muszą wystąpić wszystkie kryteria: a. tu jest zabawa ![]() ![]() Jak rozwiązać kwestię wyposażenia? Prosto... Albo z cache, albo na początku skryptu pobierz/utwórz tablicę gdzie masz inna tablicę typu klucz_id => wyposażenie. Teraz z formularza pobierasz id wybranych elementów wyposażenia. Dla pewności sprawdź, czy Ci ktoś nie spreparował formularza i zrób częśc wspólną tego co przyszło z formularza oraz wzorcowych. array_intersect przy czym dla wygody można wszystkie klucze wzorcowe machnąć jako array_keys. Jak sam widzisz, nie Kohana Ci sprawia problem, ale logika skryptu. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
thek dzięki za wyjaśnienie ale samo się trochę teraz zamotałem w tym co napisałeś ale na spokojnie powinienem to ogarnąć.
I może lepiej jest zrobić dwa zapytania?? To znaczy w modelu zrobił bym dwie funkcje. Jedna pobierała by wszystko i zwracała id_obiektu a druga by pobierała wszystkie atrybuty. Tylko nie wiem czy tak można :/ I tam jest małe niedopatrzenie w schemacie mojej bazy. pokoju id_pokoju | gdzie | opis wyposazenie id_wyposazenia | co has_wyposazenie id_has | id_pokoju | id_wyposazenia Bo chyba rozważałeś, że id w tej pierwszej tabeli to co innego niż w tej ostatniej a to jest to samo. Ten post edytował grzes999 28.03.2012, 15:27:15 |
|
|
![]()
Post
#19
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Metody modelu pisze się tak, by był przydatne
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 29 Dołączył: 5.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Próbuję pisać zapytanie tak jak mi poradziłeś thek ale mam problem z tablicą bo gdy ją deklaruję jako pustą to mi wywala błąd a gdy nie deklaruję to wiadomo błąd że nie jest zadeklarowana
Kod Database_Exception [ 1064 ]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') GROUP BY `id_pokoju'`' at line 1 [ SELECT * FROM `pokoje` JOIN `has_wyposazenie` ON (`id_pokoju` = `id_pokl`) WHERE `id_wyposazenia` IN () GROUP BY `id_pokoju` ] Moje zapytanie
Ten post edytował grzes999 29.03.2012, 13:23:30 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 14:22 |