Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL]Wynik jako tablica?
Forum PHP.pl > Forum > Przedszkole
Karioka
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] ?

marcio
A petli while()/for() dla mysql_fetch_assoc() to nie laska uzyc?
Karioka
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
marcio
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....
Karioka
  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.
MateuszS
Może zapytanie zwraca tylko 1 rekord.
mortus
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);
marcio
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.
Karioka
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!
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.