![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 6.03.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam Wszystkich,
Poszukuję najprostszego rozwiązania do poniższego problemu: Z poniższej tabeli potrzebuję pobrać rekordy dla wszystkich zamówień (ord) gdzie typ = 'wysylka' (gdy 'wysylka' nie występuje należy pobrać rekord dla 'billing') lp ord typ miasto 1 1 billing wroclaw 2 2 billing krakow 3 3 billing warszawa 4 3 wysylka lodz 5 4 billing poznan 6 5 billing krakow 7 5 wysylka katowice Tabela wyjściowa powinna wyglądać następująco: lp ord typ miasto 1 1 billing wroclaw 2 2 billing krakow 4 3 wysylka lodz 5 4 billing poznan 7 5 wysylka katowice Z góry dzięki. Pozdrawiam, zkwc |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 34 Dołączył: 22.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem czy ktos skuma o co ci chodzi, ja wymiękam (IMG:style_emoticons/default/tiredsmiley.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
bpskiba czy moge tego uzyc zeby pobieralo wynik z wybranymi kryteriami a gdy nie bedzie takiego wyniku w bazie zwroci jakis wymyslony przeze mnie tekst np 'Brak'?
Mam taki kod Select i chcialbym zeby w przypadku braku wyniku spelniajacego te kryteria pojawial sie tekst 'brak' , jak moge to zrobic uzywajac te IFNULL (SELECT user_name FROM ".DB_WYNIKI." LEFT JOIN ".DB_USERS." USING(user_id) WHERE warunek=1 AND grupa_id=t1.grupa_id) AS abc |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
bpskiba czy moge tego uzyc zeby pobieralo wynik z wybranymi kryteriami a gdy nie bedzie takiego wyniku w bazie zwroci jakis wymyslony przeze mnie tekst np 'Brak'? Mam taki kod Select i chcialbym zeby w przypadku braku wyniku spelniajacego te kryteria pojawial sie tekst 'brak' , jak moge to zrobic uzywajac te IFNULL (SELECT user_name FROM ".DB_WYNIKI." LEFT JOIN ".DB_USERS." USING(user_id) WHERE warunek=1 AND grupa_id=t1.grupa_id) AS abc TAK
Ten post edytował bpskiba 9.03.2013, 18:30:18 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Zrobilem tak i nie dziala, wyskakuje blad Unknown column 'w.user_name' in 'field list' Inne zapytanie zrobione w ten sposob tez nie dziala: "Operand should contain 1 column(s)"
natomiast jesli zrobie to w ten sposob nie wywala bledow ale tez nie zwraca tekstu 'brak' tylko nic sie nie pojawia.
Pomoze ktos? Ten post edytował lexis72 9.03.2013, 19:37:41 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
pokarz pełne zapytania a nie wycinki
pierwszy błąd mówi że nieznana jest kolumna w.user_name natomiast drugiego zapewne używasz jako podzapytania w klauzuli SELECT, a w niej podzapytanie może zwracać tylko jedną kolumnę(a są dwie) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Ok bo faktycznie user_name nie ma w bazie wyniki tylko jest user_id a user_name jest w bazie users. Poprawilem zatem zapytanie bpskiby na:
I tez wyskakuje "Operand should contain 1 column(s)" Sazian co robie zle skoro te zapytanie moze zwracac tylko 1 wynik, przy tych kryteriach nie moze byc w bazie wiecej wynikow. Wiec albo ten wynik jest wtedy powinno go wyswietlic albo go nie ma wiec wtedy chcialbym zeby wyswietlalo jakis zamienny tekst. Nie rozumiem jakie sa 2 kolumny? W tabelii kolumn jest wiele ale te zapytanie tyczy sie tylko jednej.... Tutaj musi byc cos nie tak z zapytaniem bo nawet jesli robie zapytanie dotyczace jednej kolumny to jakie where bym nie podal zawsze wyskakuje ten sam blad. Np podaje kryterium dla id wyniku=20 gdzie jest takie w bazie i powinno go wyswietlic to i tak wyskakuje blad. Podaje wynik_id=100 gdzie nie ma takiego wyniku i powinno wyswietlic zamienny tekst to tez ten sam blad...
Jak dla mnie poprawnie zrobione jest te zapytanie:
Tylko ze ono zachowuje sie jak zwykle zapytanie bez IFNULL czyli jesli wynik o podanych kryteriach znajduje sie w bazie to go zwraca a jesli nie ma takiego rekordu w bazie to nic nie wyswietla a chce zeby wyswietlalo tekst BRAK ;/ Ten post edytował lexis72 10.03.2013, 23:23:52 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Ok bo faktycznie user_name nie ma w bazie wyniki tylko jest user_id a user_name jest w bazie users. Poprawilem zatem zapytanie bpskiby na:
1. Wygląda na to, że to dalej nie jest kompletne zapytanie. Świadczy o tym np odwołanie się do t1.grupa_id i brak komunikatu o nieznanej tabeli t1 2. funkcja ifnull() ma sens tylko na polach, które mogą mieć wartość null, a wątpię aby user_id gdzieś było nulem |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzilem to na innym zapytaniu w innej bazie i wyszlo mi ze to dziala to tylko w przypadku kiedy poszukiwany rekord ma wstawiona wartosc null. Natomiast mi chodzilo o to ze rekord jest pusty (nie ma nic wpisane) albo w ogole go nie ma. Jak zrobic zapytaniem mysql by wtedy pokazywalo zamienny tekst?
To jest przykladowa moja baza danych:
Mam nastepujace zapytanie
Wybiera mi ono tylko wierwsze z warunkiem 1 i grupą ustalona wczesniej. Jesli ustalona grupa to np 5 to wskazuje mi uzytkownika o ID 12. Wszystko dziala jak nalezy. Problem jest taki ze gdy ustalona jest grupa 6 a jak widac w zalaczonej tabeli jeszcze nie ma uzytkownika ktory by nalezal do tej grupy pojawia sie puste pole a chcialbym zeby pokazywal sie wymyslony przeze mnie tekst zamienny. Czy MYSQL na prawde nie ma takiej funkcji zeby podawal zamienny tekst w przypadku gdy nie znajdzie poszukiwanego rekordu? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
Sazian co robie zle skoro te zapytanie moze zwracac tylko 1 wynik, przy tych kryteriach nie moze byc w bazie wiecej wynikow. Wiec albo ten wynik jest wtedy powinno go wyswietlic albo go nie ma wiec wtedy chcialbym zeby wyswietlalo jakis zamienny tekst. Nie rozumiem jakie sa 2 kolumny? W tabelii kolumn jest wiele ale te zapytanie tyczy sie tylko jednej.... w.user_name to pierwsza kolumna, a ,IFNULL(u.user_id,'brak') to druga kolumna podzapytanie użyte w SELECT musi zwracać wartość czyli jedną kolumnę i jeden wiersz tak na szybko
czyli jeśli niema odpowiedniego rekordu w "groups" wyświetli 'brak', a jeśli jest to wyświetli nazwę grupy |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Ok juz wiem o co chodzi z tymi 2 kolumnami ale to ciagle nie dziala.... Poprawne zapytanie powinno zatem wygladac tak :
Nie wywala juz zadnego bledu ale nie zwraca tez tekstu 'brak' gdy nie znajdzie wyniku. Po prostu te zapytanie zwroci 'brak' tylko w przypadku kiedy ten rekord bedzie mial wartosc NULL a nie w przypadku kiedy bedzie PUSTY lub gdy w ogole takiego rekordu NIE BEDZIE w bazie. A w mojej bazie nie uzywam nulli po prostu jak czegos nie ma to komorka pozostaje pusta.. I chodzi mi o to ze jak jest pusta to zeby zwracal tekst albo jak nie ma rekordu spelniajacego te kryteria to zeby wyswietlalo ten tekst. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
po pierwsze to że nie używasz nuli jest nieistotne
załóżmy że masz takie tabele users: userId|userName|groupId 1|user_1 |1 2|user_2 |5 3|user_10 |9 oraz tabela z grupami groups: groupId|groupName 1|pierwsza grupa to zapytanie
da w wyniku user_1|pierwsza grupa user_2| NULL user_10| NULL jak widzę twoje zapytanie dalej jest bardo tajemnicze i pokazujesz tylko pod zapytanie (IMG:style_emoticons/default/wink.gif)
coś więcej naprawdę jest ciężko powiedzieć nie znając struktury bazy i zapytania głównego |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
może warto to odwrócić
Użytkownik zapewne istnieje, zapewne jest też w jakiejś grupie.... a być może ma jakieś wiadomości Swoją drogą tak się zastanawiam, czy pytającemu nie chodzi o mysql_num_rows()................................................................ .... Ten post edytował bpskiba 11.03.2013, 20:43:50 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 23:54 |