ďťż
 
select like ďťż
 
select like
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

select like



raker - 28-02-2006 13:11
select like
  Witam
Zakladamy ze mamy tabele users w ktorej jedno z pol to login.
Czy da sie wybrac z tabeli wszystkie loginy ktore zawieraja np. 'test' w tym
loginie ale na pierwszej pozycji bedzie wlasnie login 'test' a na nastepnych
pozostale ktore zawieraja 'test' (czyli w pierwszej kolejnosci wyswietlamy tak
jakbysmy wykonali 'SELECT * FROM users WHERE login = 'test' a pozniej 'SELECT *
FROM users WHERE login LIKE '%test%' AND login != 'test';

Chodzi mi czy da sie te powyzsze zapytania wykonac jako jedno zapytanie?

Dzieki za pomoc

Pozdrawiam

Raker

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





Jan Słupicki - 28-02-2006 13:12

  > Witam
> Zakladamy ze mamy tabele users w ktorej jedno z pol to login.
> Czy da sie wybrac z tabeli wszystkie loginy ktore zawieraja np. 'test' w
> tym
> loginie ale na pierwszej pozycji bedzie wlasnie login 'test' a na
> nastepnych
> pozostale ktore zawieraja 'test' (czyli w pierwszej kolejnosci wyswietlamy
> tak
> jakbysmy wykonali 'SELECT * FROM users WHERE login = 'test' a pozniej
> 'SELECT *
> FROM users WHERE login LIKE '%test%' AND login != 'test';
>
> Chodzi mi czy da sie te powyzsze zapytania wykonac jako jedno zapytanie?

Możesz zrobić tak
SELECT * FROM users WHERE login = 'test'
UNION ALL
SELECT * FROM users WHERE login LIKE '%test%' AND login != 'test'

--
Jan Słupicki




Przemyslaw Popielarski - 28-02-2006 13:12

  Jan Słupicki <j.slupicki@provider.pl> wrote:
> Możesz zrobić tak
> SELECT * FROM users WHERE login = 'test'
> UNION ALL
> SELECT * FROM users WHERE login LIKE '%test%' AND login != 'test'

Nie gwarantuje to w zadnym wypadku, ze dostaniesz dane w w.w. kolejnosci. Bo
kolejnosc nie powinna miec *zadnego* znaczenia jesli nie uzyles ORDER. Jesli
ma znaczenie, to ktos nie pomyslal i zle zaprojektowal -- lub dopiero
probuje to zle zrobic -- baze.

Zeby nie bylo zbyt prosto, to oczywiscie pytajacy nie podal nazwy
oprogramowania, ktorego dotyczy pytanie, ale przytocze kawalek dokumentacji
z MySQL, gdzie jest potwierdzenie moich w.w. slow.

http://dev.mysql.com/doc/refman/5.0/en/union.html

I prawidlowe rozwiazanie:
"To cause rows in a UNION result to consist of the sets of rows retrieved by
each SELECT one after the other, select an additional column in each SELECT
to use as a sort column and add an ORDER BY following the last SELECT."

--
../ premax
../ premax@hot,pl
../ koniec i bomba, a kto czytal ten traba. w.g.




Jan Słupicki - 28-02-2006 13:12

  >> Możesz zrobić tak
>> SELECT * FROM users WHERE login = 'test'
>> UNION ALL
>> SELECT * FROM users WHERE login LIKE '%test%' AND login != 'test'
>
> Nie gwarantuje to w zadnym wypadku, ze dostaniesz dane w w.w. kolejnosci.
> Bo

Rzeczywiście - oparłem się na doświadczeniu a nie na dokumentacji. Sorry.
W Oraclu działa to tak jak można oczekiwać ale właśnie sprawdziłem w DB2
i tu jest odwrotnie - najpierw idą wyniki z drugiego zapytania. Ciekawe :-)

> kolejnosc nie powinna miec *zadnego* znaczenia jesli nie uzyles ORDER.
> Jesli ma znaczenie, to ktos nie pomyslal i zle zaprojektowal -- lub
> dopiero probuje to zle zrobic -- baze.
>
> Zeby nie bylo zbyt prosto, to oczywiscie pytajacy nie podal nazwy
> oprogramowania, ktorego dotyczy pytanie, ale przytocze kawalek
> dokumentacji z MySQL, gdzie jest potwierdzenie moich w.w. slow.
>
> http://dev.mysql.com/doc/refman/5.0/en/union.html
>
> I prawidlowe rozwiazanie:
> "To cause rows in a UNION result to consist of the sets of rows retrieved
> by each SELECT one after the other, select an additional column in each
> SELECT to use as a sort column and add an ORDER BY following the last
> SELECT."

Zdaje się że poza MySQL nie można zrobić takiej konstrukcji z ORDER BY po
ostatnim zapytaniu. Można by jednak zrobić coś w stylu:

SELECT * FROM (
SELECT *, 1 ord FROM users WHERE login = 'test'
UNION ALL
SELECT *, 2 ord FROM users WHERE login LIKE '%test%' AND login != 'test'
) temp
ORDER BY ord

Czyli podzapytanie i pseudokolumna do oznaczenia kolejności - powinno być
dość
przenośne.

--
Jan Słupicki





Sebastian - 28-02-2006 13:12

 
Użytkownik "raker" <rakerWYTNIJTO@poczta.onet.pl> napisał w wiadomości
news:0aa0.00000121.43ff089a@newsgate.onet.pl...
> Witam
> Zakladamy ze mamy tabele users w ktorej jedno z pol to login.
> Czy da sie wybrac z tabeli wszystkie loginy ktore zawieraja np. 'test' w
> tym
> loginie ale na pierwszej pozycji bedzie wlasnie login 'test' a na
> nastepnych
> pozostale ktore zawieraja 'test' (czyli w pierwszej kolejnosci wyswietlamy
> tak
> jakbysmy wykonali 'SELECT * FROM users WHERE login = 'test' a pozniej
> 'SELECT *
> FROM users WHERE login LIKE '%test%' AND login != 'test';
>
> Chodzi mi czy da sie te powyzsze zapytania wykonac jako jedno zapytanie?
>

Mozesz sprobowac cos takiego

SELECT *, (CASE WHEN login = 'test' THEN 1 ELSE (CASE WHEN login LIKE
'%test%' THEN 2 ELSE 3 END) END) as kolejnosc
FROM users
ORDER BY kolejnnosc

Sebastian




Jan Słupicki - 28-02-2006 13:12

  > Mozesz sprobowac cos takiego
>
> SELECT *, (CASE WHEN login = 'test' THEN 1 ELSE (CASE WHEN login LIKE
> '%test%' THEN 2 ELSE 3 END) END) as kolejnosc
> FROM users
> ORDER BY kolejnnosc

To zapytanie nie jest poprawne bo zwróci wszystkie wiersze z tabeli 'users'.
Trzebaby je zmodyfikować:
SELECT *, (CASE WHEN login = 'test' THEN 1
WHEN login LIKE '%test%' THEN 2
END) as kolejnosc
FROM users
WHERE login LIKE '%test%'
ORDER BY kolejnosc

albo do twojego oryginalnego zapytania dodać HAVING kolejnosc < 3.

--
Jan Słupicki




Sebastian - 28-02-2006 13:12

 
Użytkownik "Jan Słupicki" <j.slupicki@provider.pl> napisał w wiadomości
news:dts0hb$hpl$1@atena.e-wro.net...
>> Mozesz sprobowac cos takiego
>>
>> SELECT *, (CASE WHEN login = 'test' THEN 1 ELSE (CASE WHEN login LIKE
>> '%test%' THEN 2 ELSE 3 END) END) as kolejnosc
>> FROM users
>> ORDER BY kolejnnosc
>
>
> To zapytanie nie jest poprawne bo zwróci wszystkie wiersze z tabeli
> 'users'.
> Trzebaby je zmodyfikować:
> SELECT *, (CASE WHEN login = 'test' THEN 1
> WHEN login LIKE '%test%' THEN 2
> END) as kolejnosc
> FROM users
> WHERE login LIKE '%test%'
> ORDER BY kolejnosc
>
> albo do twojego oryginalnego zapytania dodać HAVING kolejnosc < 3.

Swieta racja. Zle doczytalem pytanie.

Sebastian
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [help] Illustrator CS - =?ISO-8859-2?Q?znikn=B1=B3_Selection_?==?ISO-8859-2?Q?Tool_=28V=29?= [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL =?iso-8859-2?q?select_sum_i_dwie_tabele..._b=B3=EAdna_agregac ja?= =?iso-8859-2?Q?=5BMySql=5D_-_select_po_5_rekordow_mniejssych_i_wi=EAkszych?= =?iso-8859-2?Q?=5BMySql=5D_Select_wed=B3ug_nazwy_pola?= =?ISO-8859-2?Q?[mysql]_Nie_potrafi=EA_zgrupowa=E6_selecta_(proste)?= =?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?= Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL [pgsql] jak =?ISO-8859-2?Q?zrobi=E6_taki_select_=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • felgiuzywane.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com