Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak rozbić dane z pola rozdzielone przecinkiem
Forum PHP.pl > Forum > Bazy danych > MySQL
wlodek
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.
someone.cool
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.
nospor
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
wlodek
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.
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.