Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> coś pokroju explode?
fiszol
post 1.11.2006, 16:26:46
Post #1





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


Witam, szukam sposobu na wyciągnięcie tylko jednej wartości z pola text w którym przechowywane są dane odseparowane spacjami, chciałbym tę wartość wybrać na drodze zapytania żeby później uniknąć explodowania stringa który sięga wagą kilkunastu kb. Orócz tegu nurtuje mnie jeszcze jedno - a mianowicie czy da się zwrócić dane z tego zapytania wdłg ORDER BY 'właśnie_ta_wartość' ?


pozdrawiam,
fiszol


--------------------
\o/
Go to the top of the page
+Quote Post
dr_bonzo
post 1.11.2006, 16:36:01
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


1. masz zle zaprojektowana baze danych
2. jak chcesz okreslic ktora z tych wartosci wyciagnac?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
fiszol
post 1.11.2006, 16:49:19
Post #3





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


ad1. to nie moja baza
ad2. to wartośc po 33 spacji więc czymś pokroju explode, żeby nie używać jak teraz:

  1. <?
  2. $q=$db->get_results("SELECT * FROM $cdb.character ORDER BY name ASC");
  3. foreach ( $z as $q )
  4.  
  5. {
  6. $data = $z->data;
  7. $data =explode(,$data);
  8. echo $data[33];
  9. };
  10. ?>

No i order zamiast by name chciałbym mieć wdłg wartości po 33 spacji...

//[php] się chrzni przy edycji...

Ten post edytował fiszol 1.11.2006, 16:50:54


--------------------
\o/
Go to the top of the page
+Quote Post
orson
post 1.11.2006, 23:04:05
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


witam

Kod
SUBSTRING_INDEX(str,delim,count)

musisz tylko dodać do tego klika modyfikacji - ta funkcja zwróci ci tekst po 33 spacji (SUBSTRING od pozycji najbliższej spacji lub coś podobnego) i dać sobie to jako alias i wtedy możesz po tym posortować ...

pozdrawiam


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
fiszol
post 1.11.2006, 23:34:18
Post #5





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


Cytat
SUBSTRING_INDEX(str,delim,count)

Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX() performs a case-sensitive match when searching for delim.

Więc wedle tego co napisano powyżej zwróci mi wszystko co znajdzie się na lewo lub prawo od jednostki po 33 spacji i dokładnie tak się dzieje

Dzięki i tak, bo w manualu tuż nad SUBSTRING_INDEX znalzłem jeszcze SUBSTRING i skleciłem zapytanie w taki sposób:
  1. SELECT SUBSTRING(SUBSTRING_INDEX(DATA,' ',33), -2) //(...)

, dostaje więc to czego chcem - został mi jeszcze jeden mał problem - jeśli dam:
  1. SELECT
  2. //jakies tam pola, miedzy innymi TO felerne
  3. ORDER BY SUBSTRING(SUBSTRING_INDEX(DATA,' ',33), -2)

zwrot dostaję jakiś pomieszany, a już napewno nie ułożony jak należy


--------------------
\o/
Go to the top of the page
+Quote Post
orson
post 2.11.2006, 08:56:42
Post #6





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


witam ...

Do kolumny SUBSTRING(SUBSTRING_INDEX(data,' ',33), -2) dodaj alias (AS foo) i potem ORDER BY foo.

Jeżeli to jest liczba to musisz wykonać CAST (możesz przy definicji kolumny, odpadnie dodatkowa funkcja w ORDER BY. Jeżeli to nie liczna to spróbuj jeszcze dać TRIM.

pozdrawiam


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
fiszol
post 3.11.2006, 00:16:22
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


nie potrafię sobie poradzić z tym CAST()'em a dorzucenie aliasu nie daje pożądanych rezultatów, na chwile obecną moje query wygląda tak:

  1. SELECT id, name, race, class, map, position_x, position_y, SUBSTRING(SUBSTRING_INDEX(DATA,' ',33), -2) AS DATA
  2. FROM `character` ORDER BY DATA DESC


zwrot z samego data wygląda np tak:
4
12
7
11
itd...

może problemem jest to że data ma raz jedną, raz dwie cyfry?
jak powinno więc wyglądać to zapytanie?

pozdro i dzięki za dotychczasową pomoc


--------------------
\o/
Go to the top of the page
+Quote Post
orson
post 3.11.2006, 08:19:13
Post #8





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


Witam.

Kod
CAST (SUBSTRING(SUBSTRING_INDEX(data,' ',33), -2) AS SIGNED) AS date


pozdrawiam


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
fiszol
post 5.11.2006, 01:48:38
Post #9





Grupa: Zarejestrowani
Postów: 449
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

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


dzieki, teraz już jest idealnie.


--------------------
\o/
Go to the top of the page
+Quote Post
death from beyon...
post 7.11.2006, 09:01:01
Post #10





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

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


Cytat(dr_bonzo @ 1.11.2006, 16:36:01 ) *
1. masz zle zaprojektowana baze danych


Nie rozumiem dlaczego.... a co zrobić z tekstem np. w forum? wydaje mi się, że będzie zapisane właśnie w takim polu `text` smile.gif

Ten post edytował death from beyond 7.11.2006, 09:01:30
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: 21.06.2025 - 15:48