ďťż
 
[MySQL] złączenie 2 tabel (subquery, LIKE ?) ďťż
 
[MySQL] złączenie 2 tabel (subquery, 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

[MySQL] złączenie 2 tabel (subquery, LIKE ?)



S.Lewandowski - 27-08-2007 00:00
[MySQL] złączenie 2 tabel (subquery, LIKE ?)
  Witam,
mam taki problem:

2 tabele:

tabela1
id | user_id | word |
-------------------------
1 | 1 | ala |
2 | 1 | obraz |
3 | 2 | drzwi |
4 | 3 | lampa |
5| 2 | zegar |
........

tabela2
id | string |
---------------------------
1 | ala ma kota |
2 | czarne drzwi |
3 | zielony rower |
4 | bardzo_fajny_zegar |
.........

Jak wyciagnąć jednym zapytaniem, ew. z użyciem podzapytania wszyskich
użytkowników, których 'tabela1.word' zawiera się w 'tabela2.string' ? Czyli
w tym wypadku chciałym otrzymać coś takiego:

user_id | word | string |
---------------------------------------------
1 | ala | ala ma kota |
2 | drzwi | czarne drzwi |
2 | zegar | bardzo_fajny_zegar |

Pozdrawiam i z góry dziękuję za pomoc





Marcin - 27-08-2007 00:00

  S.Lewandowski pisze:
> Witam,
> mam taki problem:
>
> 2 tabele:
>
> tabela1
> id | user_id | word |
> -------------------------
> 1 | 1 | ala |
> 2 | 1 | obraz |
> 3 | 2 | drzwi |
> 4 | 3 | lampa |
> 5| 2 | zegar |
> .......
>
> tabela2
> id | string |
> ---------------------------
> 1 | ala ma kota |
> 2 | czarne drzwi |
> 3 | zielony rower |
> 4 | bardzo_fajny_zegar |
> ........
>
> Jak wyciagnąć jednym zapytaniem, ew. z użyciem podzapytania wszyskich
> użytkowników, których 'tabela1.word' zawiera się w 'tabela2.string' ? Czyli
> w tym wypadku chciałym otrzymać coś takiego:
>
> user_id | word | string |
> ---------------------------------------------
> 1 | ala | ala ma kota |
> 2 | drzwi | czarne drzwi |
> 2 | zegar | bardzo_fajny_zegar |
>
> Pozdrawiam i z góry dziękuję za pomoc
>
>
Na przykład tak:

mysql> select t1.user_id, t1.word, t2.string
-> from tabela1 as t1 inner join tabela2 as t2
-> on t2.string like concat('%',t1.word,'%');
+---------+-------+--------------------+
| user_id | word | string |
+---------+-------+--------------------+
| 1 | ala | ala ma kota |
| 2 | drzwi | czarne drzwi |
| 2 | zegar | bardzo_fajny_zegar |
+---------+-------+--------------------+
3 rows in set (0.00 sec)

Z tym że user_id i word będą się powtarzać jeśli tabela1.word będzie się
mieścić w kilku wierszach z tabeli tabela2, ale skoro chcesz wyświetlać
tabela2.string to chcesz chyba wyświetlić wszystkie pasujące stringi




Marcin - 27-08-2007 00:00

  Marcin pisze:
> S.Lewandowski pisze:
>> Witam,
>> mam taki problem:
>>
>> 2 tabele:
>>
>> tabela1
>> id | user_id | word |
>> -------------------------
>> 1 | 1 | ala |
>> 2 | 1 | obraz |
>> 3 | 2 | drzwi |
>> 4 | 3 | lampa |
>> 5| 2 | zegar |
>> .......
>>
>> tabela2
>> id | string |
>> ---------------------------
>> 1 | ala ma kota |
>> 2 | czarne drzwi |
>> 3 | zielony rower |
>> 4 | bardzo_fajny_zegar |
>> ........
>>
>> Jak wyciagnąć jednym zapytaniem, ew. z użyciem podzapytania wszyskich
>> użytkowników, których 'tabela1.word' zawiera się w 'tabela2.string' ?
>> Czyli
>> w tym wypadku chciałym otrzymać coś takiego:
>>
>> user_id | word | string |
>> ---------------------------------------------
>> 1 | ala | ala ma kota |
>> 2 | drzwi | czarne drzwi |
>> 2 | zegar | bardzo_fajny_zegar |
>>
>> Pozdrawiam i z góry dziękuję za pomoc
>>
> Na przykład tak:
>
> mysql> select t1.user_id, t1.word, t2.string
> -> from tabela1 as t1 inner join tabela2 as t2
> -> on t2.string like concat('%',t1.word,'%');
> +---------+-------+--------------------+
> | user_id | word | string |
> +---------+-------+--------------------+
> | 1 | ala | ala ma kota |
> | 2 | drzwi | czarne drzwi |
> | 2 | zegar | bardzo_fajny_zegar |
> +---------+-------+--------------------+
> 3 rows in set (0.00 sec)
>
>
> Z tym że user_id i word będą się powtarzać jeśli tabela1.word będzie się
> mieścić w kilku wierszach z tabeli tabela2, ale skoro chcesz wyświetlać
> tabela2.string to chcesz chyba wyświetlić wszystkie pasujące stringi

Bo jeśli np. zależy ci tylko na pobraniu user_id spełniających twój
warunek, to można tak:

mysql> select distinct t1.user_id
-> from tabela1 as t1
-> where exists ( select NULL
-> from tabela2 as t2
-> where t2.string like concat('%',t1.word,'%')
-> );
+---------+
| user_id |
+---------+
| 1 |
| 2 |
+---------+
2 rows in set (0.01 sec)

Przy czym nie spodziewaj się przy dużej ilości wierszy w tabeli tabela2,
że te zapytania będą "śmigać".




S.Lewandowski - 27-08-2007 00:00

 
Użytkownik "Marcin" <m_wroblewski@gazeta.pl> napisał w wiadomości
news:fasakn$qj9$1@inews.gazeta.pl...
> S.Lewandowski pisze:
>> Witam,
>> mam taki problem:
>>
>> 2 tabele:
>>
>> tabela1
>> id | user_id | word |
>> -------------------------
>> 1 | 1 | ala |
>> 2 | 1 | obraz |
>> 3 | 2 | drzwi |
>> 4 | 3 | lampa |
>> 5| 2 | zegar |
>> .......
>>
>> tabela2
>> id | string |
>> ---------------------------
>> 1 | ala ma kota |
>> 2 | czarne drzwi |
>> 3 | zielony rower |
>> 4 | bardzo_fajny_zegar |
>> ........
>>
>> Jak wyciagnąć jednym zapytaniem, ew. z użyciem podzapytania wszyskich
>> użytkowników, których 'tabela1.word' zawiera się w 'tabela2.string' ?
>> Czyli
>> w tym wypadku chciałym otrzymać coś takiego:
>>
>> user_id | word | string |
>> ---------------------------------------------
>> 1 | ala | ala ma kota |
>> 2 | drzwi | czarne drzwi |
>> 2 | zegar | bardzo_fajny_zegar |
>>
>> Pozdrawiam i z góry dziękuję za pomoc
> Na przykład tak:
>
> mysql> select t1.user_id, t1.word, t2.string
> -> from tabela1 as t1 inner join tabela2 as t2
> -> on t2.string like concat('%',t1.word,'%');
> +---------+-------+--------------------+
> | user_id | word | string |
> +---------+-------+--------------------+
> | 1 | ala | ala ma kota |
> | 2 | drzwi | czarne drzwi |
> | 2 | zegar | bardzo_fajny_zegar |
> +---------+-------+--------------------+
> 3 rows in set (0.00 sec)
>
>
> Z tym że user_id i word będą się powtarzać jeśli tabela1.word będzie się
> mieścić w kilku wierszach z tabeli tabela2, ale skoro chcesz wyświetlać
> tabela2.string to chcesz chyba wyświetlić wszystkie pasujące stringi

Działa jak należy. Wielkie dzięki :)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nawschodzie.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