Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie w tabeli, po KODzie wyciągnąć WARTOŚĆ z tabeli
wasnia
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.11.2008

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


Witajcie.

Pisze pracę - bilingi w php.
No i napotkałem taki mały problem.

Mam tabelę w MySQL:
=====================
|id | kod | wartosc |
=====================
|1 |10 | Połączenie |
|2 |25 | SMS |
|3 |75 | Roaming |
itd.....

następnie wybieram wszystko i wyświetlam

  1. <?php
  2. $result = mysql_query(&#092;"SELECT id, kod, wartosc FROM bilingi.typy_uslug\");
  3.  
  4. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  5.    printf (&#092;"ID: %s  Nazwa: %s Wartość: %s <br/>\", $row[\"id\"], $row[\"kod\"], $row[\"wartosc\"]);
  6. ?>


Więc mam całą tebelę z MySQL w zmiennej $row.
W tym momencie pojawia mi się problem.
Chciałbym aby jakaś funkcja po podaniu jej wartości np.10 zwróciła mi wartość Połączenie z tabeli $row
analogicznie,
po podaniu jej 25 ma zwrócić SMS
75 => Roaming... itd...

Wiem też jak zrobić to od topora, wstawić funkcję while lub for... ale to ma być bardzo zoptymalizowany kod ponieważ będzie wykonywany dla około 17tyś rekordów.

Dziękuję
Go to the top of the page
+Quote Post
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jeśli ma być szybki to przerzuć to polecenie na serwer MySQL'a.

  1. SELECT id, kod, wartosc FROM bilingi.typy_uslug WHERE kod='$kod'


w zmiennej $kod trzymasz ten kod 10, 25 czy 75

ale nie wiem czy dobrze zrozumiałem.

Ten post edytował piotrooo89 4.01.2009, 17:27:17
Go to the top of the page
+Quote Post
wasnia
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.11.2008

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


też o tym myślałem, ale za każdym razem będę musiał pytać bazę... ponad 17tyś. wierszy :/
może istnieje taka funkcja.. a my o niej nie wiemy
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




lepiej zapytać 17k razy bazę mysql niż na paser php który przy takiej ilości danych może troszkę zgłupieć.
Go to the top of the page
+Quote Post
krowal
post
Post #5





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Możesz to trochę zoptymalizować zapisując wybrane już sety kod => wartosc do tablicy i później przed każdym zapytaniem sprawdzić czy taki set został już zapisany, jeśli tak to bierzesz z tablicy jeśli nie to wykonujesz zapytanie i dodajesz do tablicy.

edit:
Btw. 17k to wcale nie jest tak strasznie dużo, w sumie mógłbyś na początku jednym zapytaniem wczytać wszystkie dane do tablicy i potem je z niej wyciągać zamiast wykonywać x zapytań. Zobacz które rozwiązanie jest optymalniejsze.

Ten post edytował krowal 4.01.2009, 17:58:39
Go to the top of the page
+Quote Post
wasnia
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.11.2008

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


Jednak jest sposób bardzo prosty, już wam go przedstawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. <?php
  2. $result = mysql_query("SELECT id, kod AS nazwa, wartosc FROM bilingi.typy_uslug");
  3.  
  4.  
  5. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  6.    $foo["$row[1]"] = "$row[2]";
  7.    printf ("ID: %s  Nazwa: %s Wartość: %s <br/>", $row[0], $row[1], $row[2]);  
  8. }
  9. echo $foo["25"];
  10. ?>


//PS. Sam doszedłem do tego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
piotrooo89
post
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(krowal @ 4.01.2009, 17:45:23 ) *
edit:
Btw. 17k to wcale nie jest tak strasznie dużo, w sumie mógłbyś na początku jednym zapytaniem wczytać wszystkie dane do tablicy i potem je z niej wyciągać zamiast wykonywać x zapytań. Zobacz które rozwiązanie jest optymalniejsze.


ja tu bym wogóle zrezygnował z php z wyjątkiem tej zmiennej w której trzymałbym ten kod. a i zgadzam się ze 17k rekordów to nie jest jakieś wielkie obciążenie. no chyba że mówimy o sytuacji w której tworzysz ekstremalnie nieoptymalne zapytania do bazy. ale to nawet baza z 1k rekordow będzie kuleć.
Go to the top of the page
+Quote Post
bartg
post
Post #8





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 4.07.2007
Skąd: Berlin

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


Z wczytywaniem danych do tablicy to bym uważał. Kiedyś jak zaczynałem to wczytywałem do tablicy wszystkie dane około 1k userów. Oczywiście serwer siadał bo RAM się zapychał
Go to the top of the page
+Quote Post
krowal
post
Post #9





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Zależy jaki serwer, jakie dane i jaki limit pamięci ustawiony w php.ini (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W tym przypadku to chyba nie będzie strasznie dużo. Przyjmując nawet najbardziej pesymistyczną wersję, że każdy message będzie miał 1000 znaków (~1KB) to przy 17k rekordów tablica będzie miała jakieś 17-18MB. Jednak jak widać w przykładzie od @wasnia te wiadomości są raczej krótkie, przyjmijmy ze średnio 80 znaków (co i tak jest pewnie zbyt dużą liczbą), wówczas tablica zajmie w pamięci ok 1,5MB więc chyba nie ma się czym martwić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wasnia
post
Post #10





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.11.2008

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


Panowie, troszkę wam sprostuje moją sytuacje z tą tablicą.

Wyobraźcie sobie że jest plik bilingowy z 17k połączeń.
Każdy typ połączenia jest oznaczony kodem (przyjmijmy: 10 - Połączenie krajowe, 25- SMS, 75-Połączenie wychodzące w Roamingu, itd.).

Mamy 15k połączeń typu 10 - Połączenie krajowe.
1k połączeń typu 25 - SMS
1k połączeń typu 75 - Roaming...

I teraz tak rozwiązałem to, że aby zamienić 'typ połączenia' na 'oznaczenie słowne połączenia' wystarczy odwołać się do tej mojej skromnej tablicy w pamięci, która zostaje wczytana tylko raz przed użyciem pętli i po wszystkim.
I mam rozkodowany typ połączenia i wszyscy wiedzą jaki to był typ połączenia.

A sposobem @piotrooo89 musiłbym odwoływać się tyle razy do bazy, ile mam połączeń.
Myślę, że to już jest bardzo optymalny kod.

Ten post edytował wasnia 5.01.2009, 20:57:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 01:32