Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak rozbić dane z pola rozdzielone przecinkiem
wlodek
post 3.10.2009, 21:48:10
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


Witam,

Mam problem z zapytaniem, w którego sklad wchodzą 2 tabele.

tabela 1

----------------------------------
| idT1 | pT1 |
----------------------------------
| 1 | 1,2,5 |
| 2 | 2,5,7 |
| 3 | 1,3,5 |
-----------------------------------

tabela 2

----------------------------------
| idT2 | pT2 |
----------------------------------
| 1 | jabłka |
| 2 | gruszki |
| 3 | śliwki |
| 4 | wiśnie |
| 5 | maliny |
.................
| 7 | morele |
-----------------------------------

i chcę otrzymać takie dane
----------------------------------
| idT1 | pT2 |
----------------------------------
| 1 | jabłka |
| 1 | gruszki |
| 1 | maliny |
-----------------------------------

Stosowałem SELECT * FROM T1, T2 where idT2 in (pT1) i .... lipa.

co robie źle?

Jak ten problem rozwiązać. Dzięki za pomoc.

Ten post edytował wlodek 4.10.2009, 20:46:52
Go to the top of the page
+Quote Post
someone.cool
post 5.10.2009, 10:59:15
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 1
Dołączył: 31.01.2009

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


Siemka! użyj substringa:

wykrywasz pozycję pierwszego przecinka, wtedy te znaki sprzed "," dajesz do tabeli tymczasowej (albo na bieżąco podmieniasz). Obcinasz przecinek i znaki przed nim. itd.

Wtedy masz każdy po-przecinkowany rekord pokrojony na pojedyncze rekordziki. Ja w pracy zrobiłem to w while za pomocą procedury składowanej.

mam nadzieję że jasno sie wyraziłem.

Ten post edytował someone.cool 5.10.2009, 11:02:24
Go to the top of the page
+Quote Post
nospor
post 5.10.2009, 11:04:13
Post #3





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




masz źle zaprojektowaną bazę.
Nie jedno pole z wartosciami po przecinkach, a dodatkowa tabela ktora przechowuje ID pierwszej tabeli i drugiej tabeli

pole:
1 | 1,2,5 |
bedzie zastąpiony w tej nowej tabeli takimi rekordami:
1,1
1,2
1,5


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

"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
wlodek
post 5.10.2009, 17:30:36
Post #4





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


rozwiązałem problem za pomocą 2 zapytań.

  1. sql = "select id, p1T1, ..., from T1 where p1T1 in (piT1)"
  2. .....
  3. $a = $r["p1T1"];
  4. ....
  5. ....
  6. sql = "select id, p1T2, ......, from T1, t2 where $a in (p1t2)"


Działa.
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: 1.07.2025 - 00:30