Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie złożone dwie tabele
Forum PHP.pl > Forum > Bazy danych > MySQL
cdc
Cześć

Mam tebelę Rozmowy: Data, Czas, Dlugosc, Nr_wybrany
Oraz tabelę Ceny: Prefix, Nazwa_kierunku, Cena

Chciałbym wykonać zapytanie, które by przyporządkowało cenę za dony prefix do rozmowy jesli początkowe cyfry z nr_wybrany będą się zgadzać z prefix.

Przykład:
(Rozmowy)
03-07-2009 12:00 12452 48782243992
03-07-2009 12:30 34323 48703435672
03-07-2009 13:00 32432 48782233992
03-07-2009 14:00 34544 48700033992
(Ceny)
4878 kierunek_matka 0.2
4878223 dziecko1 0.45
4878224 dziecko2 0.45

Zapytanie musi znaleźć najpierw najbardziej pasujący prefix do numeru. Nie może wziąść 4878 do numeru 48782243992 tylko 4878224.
Jest na to sposób?

Wynik powinien być:
Data, Czas, Dlugosc, Nr_wybrany, Prefix, Nazwa_kierunku, Cena
Quider
Ja bym rozwiązał to tak, że do każdej z tabl dodałbym klucze pomocnicze (w zasadzie tam gdzie trzeba) i w zapytaniu przypisując konkretne klucze do indentyfikatorów można stworzyć relację pomiędzy tabelami.
#luq
Powinno być ok:
  1. SELECT r.DATA, r.Czas, r.Dlugosc, r.Nr_wybrany, c.Prefix, c.Nazwa_kierunku, c.Cena
  2. FROM Rozmowy AS r, Ceny AS c
  3. WHERE LEFT( r.Nr_wybrany, LENGHT( c.Prefix ) ) = c.Prefix
cdc
Cytat(#luq @ 3.07.2009, 17:27:39 ) *
Powinno być ok:
  1. SELECT r.DATA, r.Czas, r.Dlugosc, r.Nr_wybrany, c.Prefix, c.Nazwa_kierunku, c.Cena
  2. FROM Rozmowy AS r, Ceny AS c
  3. WHERE LEFT( r.Nr_wybrany, LENGHT( c.Prefix ) ) = c.Prefix


Jest bardzo b\dobrze tylko że dopasowanie jest wielokrotne. Np są dwa wiersze: pierwszy znaleziony dzięki Prefixowi 48 a drugi 4822 dla numeru 4822399..

Można to jakoś naprawić, żeby ważniejszy był prefiks o dłuższej liczbie znaków?
SzamanGN
Po dłuższej alaizie stwierdziłem, że lepiej jest w fazie dodawania wpisu o wybranym numerze dodać też informację o wybranym prefiksie, więc trzeba zrobić tak:
1. do tabeli rozmowy dodać kolumnę wybrany_prefix.
2. Dodawać wpis za pomocą:
  1. INSERT INTO `rozmowy` (`id_r`, `data`, `czas`, `dlugosc`, `nr_wybrany`,`wybrany_prefix`) VALUES (NULL, CURDATE(), CURTIME(), '100', '487822433',(SELECT `prefix` FROM `ceny` WHERE LEFT( '487822433' , LENGTH( `prefix` ) ) = `prefix` ORDER BY `prefix` DESC LIMIT 1 ));


3. Otzrymanie wyniku:
Cytat
Data, Czas, Dlugosc, Nr_wybrany, Prefix, Nazwa_kierunku, Cena

to już bajka.
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.