Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie złożone dwie tabele
cdc
post 3.07.2009, 15:32:09
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.11.2006

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


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

Ten post edytował cdc 3.07.2009, 20:23:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Quider
post 3.07.2009, 16:01:48
Post #2





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


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.


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
#luq
post 3.07.2009, 16:27:39
Post #3





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


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


Ten post edytował #luq 3.07.2009, 16:27:59


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
cdc
post 6.07.2009, 12:26:38
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.11.2006

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


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?

Ten post edytował cdc 6.07.2009, 12:39:59
Go to the top of the page
+Quote Post
SzamanGN
post 8.07.2009, 09:42:32
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 14
Dołączył: 11.10.2007

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


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.


--------------------
SzamanGN
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: 14.08.2025 - 09:59