Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] Pozycja rekordu w zwracanych wynikach
jajcarzd1
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Witam

Mam pytanie czy istnieje jakiś operator, funkcja w mysql-u dzięki której mógłbym uzyskać informację na jakiej pozycji znajdzie się pewien rekord w zwróconych wynikach, przy założeniu oczywiście konkretnego ordera. Oczywiście mogę pobrac wszystkei dane i przelecieć sobie po tablicy wnikowej w php, ale interesuje mnie to czy mozna te dane pobrać już wcześniej w samym zapytaniu. Np. pobieram wszystkie dane w porządku rosnącym i na którym miejscu jest rekord o id 50.

Dzięki pozdro.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
pgrzelka
post
Post #2





Grupa: Zarejestrowani
Postów: 313
Pomógł: 24
Dołączył: 9.08.2008
Skąd: Kielce

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


hmm... rekord o id = 50 jest na pozycji 50 ? czy ja źle pytanie zrozumiałem ?

Ten post edytował pgrzelka 25.05.2009, 14:01:01
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(pgrzelka @ 25.05.2009, 15:00:23 ) *
hmm... rekord o id = 50 jest na pozycji 50 ? czy ja źle pytanie zrozumiałem ?


No raczej źle zrozumiałeś. Id to kolejny nr który jest autoinkrementowany i jest np. kluczem głównym. Np w tabeli gallery będzie idgallery. Oczywiście jeśli będziemy dodawać kolejen rekordy i ich nie usuwać to powinno sięzgadzac ale jeśli usuniemy np 5 pierwszych to rekord o id 5 będzie już na pierwszy miejscu.
Go to the top of the page
+Quote Post
Spawnm
post
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




array_search" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Spawnm @ 25.05.2009, 15:27:43 ) *


Czy ty wiesz co piszesz?

http://nospor.pl/mysql-faq-n25.html#faq-8
Go to the top of the page
+Quote Post
TheaSiX
post
Post #6





Grupa: Zarejestrowani
Postów: 110
Pomógł: 10
Dołączył: 3.09.2006
Skąd: Bishop Auckland

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


możesz to zrobić przy użyciu while oraz iteracji (tak myślę):

  1. <?php
  2. $i = 0;
  3. $result = mysql_query("SELECT * FROM tabela ORDER BY kolumna");
  4. while($row = mysql_fetch_array($result))
  5. {
  6.    $id = $row["id/number/numer/etc."];
  7.    if($id == 50)
  8.    {
  9.        $pos = $i;
  10.    }
  11.    $i++;
  12. }
  13. ?>


Sprawdziłem u siebie i działa. Wystarczy, że przystosujesz na swoje potrzeby..

Ten post edytował TheaSiX 25.05.2009, 17:40:39
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #7





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(TheaSiX @ 25.05.2009, 18:39:18 ) *
możesz to zrobić przy użyciu while oraz iteracji (tak myślę):

  1. <?php
  2. $i = 0;
  3. $result = mysql_query("SELECT * FROM tabela ORDER BY kolumna");
  4. while($row = mysql_fetch_array($result))
  5. {
  6.    $id = $row["id/number/numer/etc."];
  7.    if($id == 50)
  8.    {
  9.        $pos = $i;
  10.    }
  11.    $i++;
  12. }
  13. ?>


Sprawdziłem u siebie i działa. Wystarczy, że przystosujesz na swoje potrzeby..


Wiem że działa bo to żaden problem przelecieć po pętli i znaleźć swój rekord, ale jak zaznaczyłem na samym początku interesuje mnie rozwiązanie uzyskania takiego info przez samo zapytanie. Skorzystałem z linku podanego przez kolegę wookieb-a i tam znalazłem, rozwiązanie, które wkleję dla potomnych poniżej

  1. SET @id=5,@nr = 0, @idnr = 0;
  2. SELECT @idnr AS nr FROM
  3. (SELECT @nr:=@nr+1,IF(ID=@id, @idnr := @nr,@idnr=@idnr),ID FROM tabela WHERE jakiespole ='jakiswarunek' ORDER BY jakiespole jakiessortoanieASClubDESC) podsel WHERE podsel.ID = @id;


Dzięki i pozdro.

Cytat(jajcarzd1 @ 26.05.2009, 08:40:23 ) *
Wiem że działa bo to żaden problem przelecieć po pętli i znaleźć swój rekord, ale jak zaznaczyłem na samym początku interesuje mnie rozwiązanie uzyskania takiego info przez samo zapytanie. Skorzystałem z linku podanego przez kolegę wookieb-a i tam znalazłem, rozwiązanie, które wkleję dla potomnych poniżej

  1. SET @id=5,@nr = 0, @idnr = 0;
  2. SELECT @idnr AS nr FROM
  3. (SELECT @nr:=@nr+1,IF(ID=@id, @idnr := @nr,@idnr=@idnr),ID FROM tabela WHERE jakiespole ='jakiswarunek' ORDER BY jakiespole jakiessortoanieASClubDESC) podsel WHERE podsel.ID = @id;


Dzięki i pozdro.



Pojawił mi się jednak pewien problem z tym rozwiazaniem nospora. Jeżeli wyciągam dane z jednej tabeli uzyskuję oczekwiany wynik jeżeli natomiast zastosuję jakiegoś inner joina z drugą tabelą to już otrzymuję zero. Co ciekawe wystepuje to gdy mam klauzulę order by jeżeli natoamist ordera wywalę to wynik mam zwracany poprawnie. No ale bez ordera to mi akurat nie pasuje. Miałby ktoś pomysł w czym moze być problem ?

Ten post edytował jajcarzd1 26.05.2009, 07:41:39
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




to pokaz to nowe zapytanie co masz
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #9





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


  1. SET @id=22,@nr=0,@idnr=0;
  2. SELECT @idnr AS nr FROM
  3. (SELECT @nr:=@nr+1,IF(c.idconfig=@id, @idnr := @nr,@idnr=@idnr),c.idconfig AS ab FROM config AS c INNER JOIN details AS d ON c.idconfig = d.idconfig WHERE c.name='homepage' ORDER BY c.sequence DESC)
  4. podsel WHERE podsel.ab = @id
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




a czy nie masz przypadkiem bledu zapytania? Sprawdzales to?
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #11





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(nospor @ 28.05.2009, 10:06:21 ) *
a czy nie masz przypadkiem bledu zapytania? Sprawdzales to?


Sprawdzałem. Generalnie jak wywale sortowanie "order by c.sequence desc" to wynik już uzyskuje a jak pozostawię to ejst lipa i mam zero
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




sorki ze sie czepiam, ale jak sprawdzales czy nie ma bledu zapytania?
Bo jak bys mial blad zapytania, to wtedy faktycznie dostaniesz 0.
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #13





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(nospor @ 28.05.2009, 10:14:51 ) *
sorki ze sie czepiam, ale jak sprawdzales czy nie ma bledu zapytania?
Bo jak bys mial blad zapytania, to wtedy faktycznie dostaniesz 0.


Hmm no chyba nie bardzo się rozumiemy. Jeżeli w podzapytaniu nie zastosuję ordera to wynik mam poprawny jeżeli go natomiast dołoże to wtedy mam zero więc zapytanie powinno być ok. Poza tym zerknąłem na wynik tego podzapytania pozostawiając tylko

  1. SET @id=22,@nr=0,@idnr=0;
  2.  
  3. (SELECT @nr:=@nr+1,IF(c.idconfig=@id, @idnr := @nr,@idnr=@idnr),c.idconfig AS ab FROM config AS c INNER JOIN details AS d ON c.idconfig = d.idconfig WHERE c.name='homepage' ORDER BY c.sequence DESC)


i z orderem w kolumnie "if(c.idconfig=@id, @idnr := @nr,@idnr=@idnr)" mam jedynki a przy odpowiendim id mam 0 natomiast bez ordera mam jego pozycję
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




mozesz zapodac screena z wynikow tego zapytania, o którym w ostatnim poscie wspomniales?
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #15





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Pierwsze

  1. SET @id=22,@nr=0,@idnr=0;
  2. (SELECT @nr:=@nr+1,IF(c.idconfig=@id, @idnr := @nr,@idnr=@idnr),c.idconfig AS ab, c.sequence FROM config AS c INNER JOIN details AS d ON c.idconfig = d.idconfig WHERE c.name='homepage')


http://jajcarz.linuxpl.eu/images/bez_ordera.jpg

Drugie

  1. SET @id=22,@nr=0,@idnr=0;
  2. (SELECT @nr:=@nr+1,IF(c.idconfig=@id, @idnr := @nr,@idnr=@idnr),c.idconfig AS ab, c.sequence FROM config AS c INNER JOIN details AS d ON c.idconfig = d.idconfig WHERE c.name='homepage' ORDER BY c.sequence ASC)


http://jajcarz.linuxpl.eu/images/z_orderem.jpg
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Kurcze, to jest nie logiczne.... albo mam zacme i nie widze jakiegoś banału :/
Przeslij jak mozesz mi na maile strukture i dane tych dwoch tabel. Jesli jest duzo rekordow to skróc do np. 50. Jak masz tajne dane to sie ich pozbadz. W wolnej chwili lukne na to na spokojnie u siebie

Wyslij na adres
[mojnick][malpa]gmail[kropka]com
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #17





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(nospor @ 28.05.2009, 11:11:04 ) *
Kurcze, to jest nie logiczne.... albo mam zacme i nie widze jakiegoś banału :/
Przeslij jak mozesz mi na maile strukture i dane tych dwoch tabel. Jesli jest duzo rekordow to skróc do np. 50. Jak masz tajne dane to sie ich pozbadz. W wolnej chwili lukne na to na spokojnie u siebie

Wyslij na adres
[mojnick][malpa]gmail[kropka]com


Ok poszło
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




no i juz wiem gdzie jest blad. chodzi o @nr, do ktorego nie przypisuja sie wartosci gdy jest join i order
  1. SELECT @nr:=@nr+1,@nr
  2. FROM config AS c LEFT JOIN details AS d ON c.idconfig = d.idconfig WHERE c.name='oczamiinnych'
  3. ORDER BY c.sequence

Wyniki
1 0
2 0
3 0
4 0
5 0

  1. SELECT @nr:=@nr+1,@nr
  2. FROM config AS c LEFT JOIN details AS d ON c.idconfig = d.idconfig WHERE c.name='oczamiinnych'

Wyniki
1 1
2 2
3 3
4 4
5 5

teraz wywalamy join i nie zaleznie czy jest order czy nie to dziala
  1. SELECT @nr:=@nr+1,@nr
  2. FROM config AS c
  3. ORDER BY c.sequence

Wyniki
1 1
2 2
3 3
4 4
5 5


No i na chwile obecną nie rozumiem tego zachowania. Co ma left join w połączeniu z order, ze nie dziala przypisanie zmiennej @nr. Choc w pewnym sensie dziala, bo @nr:=@nr+1 rosnie prawidlowo
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #19





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(nospor @ 28.05.2009, 11:55:28 ) *
No i na chwile obecną nie rozumiem tego zachowania. Co ma left join w połączeniu z order, ze nie dziala przypisanie zmiennej @nr. Choc w pewnym sensie dziala, bo @nr:=@nr+1 rosnie prawidlowo


No ja niestety też (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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: 22.12.2025 - 17:33