Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie Mysql z rozdzielaniem ciągu w wyniku
sokot
post 23.04.2015, 10:15:59
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
mmmmmmm
post 23.04.2015, 11:42:24
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 23.04.2015, 11:50:43
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ę sad.gif
Go to the top of the page
+Quote Post
viking
post 23.04.2015, 12:02:20
Post #4





Grupa: Zarejestrowani
Postów: 6 378
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 23.04.2015, 12:18:24
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 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 23.04.2015, 12:41:11
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 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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sokot
post 23.04.2015, 13:02:48
Post #7





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

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


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.
Go to the top of the page
+Quote Post
trueblue
post 23.04.2015, 13:15:03
Post #8





Grupa: Zarejestrowani
Postów: 6 803
Pomógł: 1827
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 23.04.2015, 13:54:16
Post #9





Grupa: Zarejestrowani
Postów: 6 378
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 23.04.2015, 14:33:36
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 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,

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





Grupa: Zarejestrowani
Postów: 6 803
Pomógł: 1827
Dołączył: 11.03.2014

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


Pokaż jakie zapytanie utworzyłeś.


--------------------
Go to the top of the page
+Quote Post
viking
post 23.04.2015, 15:07:55
Post #12





Grupa: Zarejestrowani
Postów: 6 378
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 23.04.2015, 15:29:44
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 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
Go to the top of the page
+Quote Post
trueblue
post 23.04.2015, 15:33:54
Post #14





Grupa: Zarejestrowani
Postów: 6 803
Pomógł: 1827
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 23.04.2015, 15:43:48
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 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 10:28