Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie Mysql z rozdzielaniem ciągu w wyniku
Forum PHP.pl > Forum > Bazy danych > MySQL
sokot
Witam,

Mam taką zagwostkę. Mam bazę w której jest tabela z kolumną a w niej wartości rozdzielane przecinkiem (1243, 564, 3244, 3455). Są to numery Id z innej tabeli tej samej bazy. Chciałbym w zapytaniu wyciągnąć tą wartość rozdzielić te numery ID i odnieść się za ich pomocą do drugiej tabeli aby wyciągnąć po tej relacji inne wartości (nazwy). Czy zna ktoś może takie zapytanie ?

Pozdrawiam serdecznie,
Marcin
mmmmmmm
Ja znam rozwiązanie: znormalizuj tabele...
Zanim nie zabrniesz za daleko.
sokot
Niestety nie mogę tego zrobić to baza systemu TYPO3. Wydaje mi się też ze to nie jest rozwiązanie dodane tam przez zewnętrzną osobę sad.gif
viking
To w sumie wystarczy tylko te numery dać do WHERE id IN() jeśli wszystkie je chcesz sprawdzić.
sokot
Hej dzieki za podpowiedź. Prawie działa wink.gif
Dałem takie zapytanie:

  1. SELECT title FROM `fe_groups` WHERE uid IN (SELECT fe_group FROM pages WHERE uid = 9743);


gdzie title to interesująca mnie nazwa uid pierwsze to id łączący a z drugiego zapytania (w nawiasie) pole fe_group posiada ten ciąg do rozbijania na poszczególne idy. Niestety pobiera tylko pierwszy id z tego ciągu i zwraca jedną nazwę.
Można prosić o pomoc co robię źle ?
nospor
IN oczekuje listy IDkow a nie tekstu z IDkami. To dwie rozne rzeczy wink.gif

@viking chyba mial na mysli, ze najpierw te IDki masz pobrac w php a potem wykonac drugie zapytanie z IN ze zmienną z PHP. Bo niczego innego sobie nie wyobrazam co mogl miec viking na mysli
sokot
Aha sad.gif

Kurcze szkoda. Ale wydaje mi się że jest jakaś możliwość pobrania tych idków do wyniku zapytania w tablice (liste) i wtedy by zadziałało.
Tylko w samym zapytaniu w nawiasie trzeba było rozbijać ciąg. Kurcze jesli ktoś coś słyszał to będe wdzięczny.
trueblue
  1. SELECT .... CONCAT(',',POLE_Z_CIAGIEM_ID,',') LIKE(CONCAT('%,',id,',%'))


Przebuduj bazę jak Ci wcześniej polecano.
viking
A możesz wstawić na szybko strukturę tych tabel, okrojoną do potrzebnych pól, po której chcesz łączyć? Będzie konkretnie wiadomo co chcesz osiągnąć.
sokot
To wielkie tabele są, mam phpmyadmin i za bardzo nie wiem czy tam się da jakoś wyciągnąć zobrazowane połączenie (najlepiej tych dwóch tabel bo wszystkich jest ponad 200) prykład z CONCATEM średnio pomógł albo ja nie umiem tego ogarnąć do końca, co jest możliwe wink.gif

Pozdrawiam,



Dla zobrazowania mam id prawej tabeli po nim dostaje się do ciągu który musze rozbić i przeszukać uid lewej tabeli tymi idami aby wyciągnąć zmienne title smile.gif
Oczywiście rekordów w jednej jak i drugiej tabeli jest o wiele więcej.

Pozdrawiam,
trueblue
Pokaż jakie zapytanie utworzyłeś.
viking
Przykładowo (lewa to movies, prawa datas)

select m.* from movies m join datas d where FIND_IN_SET(m.id, dane)

Choć z tego co widzę nie korzysta to z indeksu więc słabe. Trzeba by sprawdzić czasy - czy nie będzie się bardziej opłacało zrobić array integerów w php i podstawić do IN(). `dane` to kolumna ciąg
sokot
musze to w zapytaniu ogarnąć bez phpa.

Oto moje zapytanie które nie działa sad.gif

  1. SELECT l.title FROM lewa l WHERE concat(",",( SELECT group_concat(p.ciag) FROM prawa p WHERE p.id = 233),",") LIKE concat("%,",l.uid,",%"))


Hej,

Finalnie udało siędwoma zapytaniami smile.gif

Oto one:

  1. SELECT @lst:=group_concat(p.ciag) FROM prawa p WHERE p.uid = 233;
  2. SELECT l.title FROM lewa l WHERE concat(",",@lst,",") LIKE concat("%,",l.uid,",%");


Ale jak ktoś jest w stanie poprawić moje jedno zapytaniiowe zapytanie wink.gif to w sumie chętnie poznam.

Pozdrawiam smile.gif
trueblue
Czemu robisz GROUP_CONCAT na p.ciag?
Próbowałeś zapytanie, które podał viking?
sokot
Dostałem taką podpowiedź jeszcze w innym forum.

Udało mi się też ogarnąć jednym zapytaniem. Oto ono:

  1. SELECT l.title FROM lewa l WHERE concat(",",( SELECT group_concat(p.ciag) FROM prawa p WHERE p.id = 233),",") LIKE concat("%,",uid,",%")


Pozdrawiam i dzięki za wpsomaganie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.