Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MSSQL]Wynik jako tablica?
Karioka
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.10.2007

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


Mam taki oto kod:

  1. $wynik = mysql_query (
  2. "SELECT *,
  3. MATCH(a, b, c, d) AGAINST ('".$q."') AS score
  4. FROM pliki
  5. WHERE MATCH(a, b, c, d) AGAINST('".$q."')");
  6. $rekord = mysql_fetch_assoc($wynik);
  7. $numrows = mysql_num_rows($wynik);
  8.  
  9. if ($numrows) {
  10.  
  11. print_r($rekord);
  12.  
  13. }


Mimo, że numrows zwraca wyników kilkanaście to print_r wyświetla tablicę dla pierwszego wyniku.

Czy tak zwrócony wynik nie może być wyświetlony jako zwykły element tablicy czyli np. $rekord['a'][0] ?

Go to the top of the page
+Quote Post
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


A petli while()/for() dla mysql_fetch_assoc() to nie laska uzyc?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Karioka
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.10.2007

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


Byłaby łaska, gdyby była potrzeba wyciągnięcia wszystkich elementów tablicy, a nie o to chodzi.

Pytanie było zupełnie inne: czy jest możliwość poprzez print_r wyświetlić zawartość utworzonej tablicy lub czy można jej elementy wyciągać wybiórczo np. gdy potrzebuję tylko 3 i 5 element tablicy z zapytania.

Jak wyświetlić wszystkie elementy w pętli while to wiem winksmiley.jpg
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Aha sry ale jesli cie teraz dobrze zrozumialem to print_r() nie daje takiej mozliwosci.
http://php.net/manual/en/function.print-r.php
  1. $tab[0] = 'a';
  2. $tab[1] = 'b';
  3. $tab[2] = 'c';

Teraz chcesz wyswietlic element o index'ie 2?
  1. print_r($tab[2]); //nie wiem czy zadziala


P.S jak nie to sproboj to wytlumaczyc jakos bardZiej lopatologicznie smile.gif

P.S2 co to ma wspolnego z mssql?Moze juz jest pozno i mi sie myli....

Ten post edytował marcio 22.03.2010, 02:21:13


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Karioka
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.10.2007

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


  1. print_r($tab[2]); //nie wiem czy zadziala


W ten sposób udało mi się właśnie wyświetlić wcześniej część tablicy. Jednak po wykonaniu:

  1. $wynik = mysql_query ("SELECT *, MATCH(a, b, c, d) AGAINST ('".$q."') AS score FROM pliki WHERE MATCH(a, b, c, d) AGAINST('".$q."')");
  2. $rekord = mysql_fetch_assoc($wynik);


wiem, że cała tablica zawiera kilkanaście elementów. W pętli while możemy wyświetlić je wszystkie, to nie problem. Pytanie dlaczego print_r($rekord) pokazuje tylko jeden element całej tablicy? Podobnie var_dump().

Czyżby to nie była zwykład tablica asocjacyjna, z której można wyświetlić tylko element np. $rekord[0] czy $rekord[a][0] ?

W manualu udało mi się znaleźć tylko funkcję, która po wyświetleniu wszystkich elementów z $rekord przez while tworzy nową tablicę i dopiero na tej nowej tablicy można dokonać operacji na poszczególnych elementach.

Cytat
P.S2 co to ma wspolnego z mssql


Pierwsze zapytanie wyciąga kontekstowo wyniki z bazy MySQL.


Ten post edytował Karioka 22.03.2010, 17:12:34
Go to the top of the page
+Quote Post
MateuszS
post
Post #6





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Może zapytanie zwraca tylko 1 rekord.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Bo mysql_fetch_assoc, podobnie jak mysql_fetch_row i mysql_fetch_array zwracają tylko rekord, na który wskazuje wewnętrzny wskaźnik wyniku. Na początku jest to pierwszy rekord zwróconego wyniku, a po wywołaniu którejś z powyższych funkcji wewnętrzny wskaźnik wyniku przesuwa się do kolejnego rekordu. Rozwiązaniem może być:
  1. // nawiązanie połączenia z bazą danych
  2. // wybór bazy danych
  3. $zapytanie = "..."; //tworzymy zapytanie
  4. $wynik = mysql_query($zapytanie); // wykonujemy zapytanie, a wyniki zapisujemy do zmiennej $wynik
  5. // teraz w pętli w tablicy $tab zapisujemy kolejne rekordy
  6. while($row = mysql_fetch_assoc($wynik)) {
  7. $tab[] = $row;
  8. }
  9. print_r($tab);
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(MateuszScirka @ 22.03.2010, 17:12:52 ) *
Może zapytanie zwraca tylko 1 rekord.

@Karioka chyba jestes zabardzo przekonany do tego co mowisz bo jak widac nie jest tak jak ty to opisujesz.

Zapisz dane do while i zobacz ile rekordow ci zwroci smile.gif, jak zwroci wiecej niz 1 to wtedy pokombinujemy, no chyba ze phpmyadmin ci zwraca > 1.

Cytat
Pierwsze zapytanie wyciąga kontekstowo wyniki z bazy MySQL.

Mozesz jasniej?BO chyba o czyms nie wiem....?

EDIT: @up tez o tym mowie zeby tak zrobil.

Ten post edytował marcio 22.03.2010, 17:30:53


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Karioka
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.10.2007

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


Cytat
Może zapytanie zwraca tylko 1 rekord.


Zapytania zmianiałem na prostsze. $numrows zawsze zwraca ilość jako większą od 1.

Cytat
Mozesz jasniej?BO chyba o czyms nie wiem....?


To zapytanie do pól FULLTEXT w MySQL, które zwraca wyniki z wyszukania kontekstowego, posortowane wg trafności wyniku.

Cytat
Bo mysql_fetch_assoc, podobnie jak mysql_fetch_row i mysql_fetch_array zwracają tylko rekord, na który wskazuje wewnętrzny wskaźnik wyniku.


No i właśnie o takie wyjaśnienie chodzi. Czyli na dzień dobry nie możemy operować wynikem jak tablicą. Dzięki!
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 Aktualny czas: 19.08.2025 - 16:07