2011-02-03 14 views
6

Mam jedną tabelę z następującymi rodzajami rekordów. Mam Salesman i powiązane numery kont (oddzielone przecinkami).separacja wartości oddzielonych przecinkami

+----------+----------+ 
| Salesman | Acct  | 
+----------+----------+ 
| Ron  | 1,2,3,4 | 
| Kin  | 6,7,8 | 
| Joe  | 10,23,45 | 

I am looking for output some thing like, 

+----------+----------+ 
| Salesman | Acct  | 
+----------+----------+ 
| Ron  | 1  | 
| Ron  | 2  | 
| Ron  | 3  | 

Proszę, pomóż mi napisać zapytanie, które może dać mi wynik powyżej.

Dziękuję za pomoc.

Odpowiedz

4

Zakładam, że potrzebujesz tego jako jednorazowej operacji, aby zmienić swój schemat w coś użytecznego.

Czy masz inną tabelę, która zawiera wszystkie możliwe numery kont? Jeśli to zrobisz, możesz to zrobić:

SELECT salesman, a.Acct 
FROM account AS a 
JOIN salesman_account AS sa 
ON FIND_IN_SET(a.Acct, sa.Acct) 
+0

To działało idealnie. Wielkie dzięki. Hope Op zaznacza to jako odpowiedź :) –

2

Jeśli jest to operacja jednorazowa, prawdopodobnie łatwiej jest użyć dowolnego języka pomocniczego do przetwarzania. Python lub PHP bardzo szybko rozwijają tego typu skrypty.

1

Cóż, to bardzo trudne.

Zakładam, że normalizujesz bazę danych. Jeśli nie, naprawdę powinieneś.

Gdybym był tobą, napisałbym scenariusz, by znormalizować stół. Dalej jest próbka w php (może zawierać błędy):

<?php 
$res = mysql_query('SELECT Salesman, Acct FROM table'); 
while ($obj = mysql_fetch_object($res)) { 
    $values = explode(',', $obj->Acct); 
    foreach ($values as $value) { 
    mysql_query("INSERT INTO new_table (Salesman, Acct) VALUES ('$obj->Salesman', $value)"); 
    } 
} 
?> 
Powiązane problemy