wlodek
3.10.2009, 21:48:10
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
5.10.2009, 10:59:15
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
5.10.2009, 11:04:13
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
5.10.2009, 17:30:36
rozwiązałem problem za pomocą 2 zapytań.
sql = "select id, p1T1, ..., from T1 where p1T1 in (piT1)"
.....
$a = $r["p1T1"];
....
....
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.