Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie Mysql z rozdzielaniem ciągu w wyniku
sokot
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Ja znam rozwiązanie: znormalizuj tabele...
Zanim nie zabrniesz za daleko.
Go to the top of the page
+Quote Post
sokot
post
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


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ę (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


To w sumie wystarczy tylko te numery dać do WHERE id IN() jeśli wszystkie je chcesz sprawdzić.
Go to the top of the page
+Quote Post
sokot
post
Post #5





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


Hej dzieki za podpowiedź. Prawie działa (IMG:style_emoticons/default/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 ?

Ten post edytował sokot 23.04.2015, 12:19:40
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




IN oczekuje listy IDkow a nie tekstu z IDkami. To dwie rozne rzeczy (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
sokot
post
Post #7





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


Aha (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. SELECT .... CONCAT(',',POLE_Z_CIAGIEM_ID,',') LIKE(CONCAT('%,',id,',%'))


Przebuduj bazę jak Ci wcześniej polecano.
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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ąć.
Go to the top of the page
+Quote Post
sokot
post
Post #10





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif)

Pozdrawiam,

(IMG:http://www.sokot.pl/xx.jpg)

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 (IMG:style_emoticons/default/smile.gif)
Oczywiście rekordów w jednej jak i drugiej tabeli jest o wiele więcej.

Pozdrawiam,

Ten post edytował sokot 23.04.2015, 14:34:36
Go to the top of the page
+Quote Post
trueblue
post
Post #11





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Pokaż jakie zapytanie utworzyłeś.
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował viking 23.04.2015, 15:09:46
Go to the top of the page
+Quote Post
sokot
post
Post #13





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


musze to w zapytaniu ogarnąć bez phpa.

Oto moje zapytanie które nie działa (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif) to w sumie chętnie poznam.

Pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Czemu robisz GROUP_CONCAT na p.ciag?
Próbowałeś zapytanie, które podał viking?
Go to the top of the page
+Quote Post
sokot
post
Post #15





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 26.01.2005

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował sokot 23.04.2015, 15:51:24
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 16:25