Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pomijanie jednego warunku w podzapytaniu
zaksmok
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 12.01.2006

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


Mam takie zapytanie:

  1. SELECT * FROM (SELECT @rownum:=@rownum+people_counter AS row_number, d.salary_base AS value, location, year_id FROM data_jobs d, (SELECT @rownum:=0) r WHERE location = 2 AND year_id = 3 AND salary_base IS NOT NULL AND job_id IN ('45','46','47','48') ORDER BY d.salary_base) AS t1


i niestety location=2 jest pomijane w zapytaniu. Może ktoś wytłumaczyć dlaczego?
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




1) Po co w ogóle tutaj robisz podzapytanie? Przecież to niczemu nie służy.
2) Czemu po from robisz: , (SELECT @rownum:=0) r ? Przecież to już w ogóle kaszani całość.

Masz zrobić normalne zapytanie, bez podzapytania a to:
(SELECT @rownum:=0)
masz zastąpić poprzez
SET @rownum=0 które masz wykonać jako normalne zapytanie przed głównym zapytaniem
Go to the top of the page
+Quote Post
zaksmok
post
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 12.01.2006

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


Robię tam podzapytanie, bo całe zapytanie wygląda tak:
  1. SELECT t1.value+(t1.value-t3.minimum)/2 AS up, t1.value AS m, t1.value-(t1.value-t3.minimum)/2 AS lq, AVG(t4.av) AS av, total FROM (SELECT @rownum:=@rownum+people_counter AS row_number, d.salary_base AS value FROM data_jobs d, (SELECT @rownum:=0) r WHERE year_id = 3 AND salary_base IS NOT NULL AND location = 5 AND job_id IN ('45','46','47','48') ORDER BY d.salary_base) AS t1, (SELECT sum(people_counter) AS total FROM data_jobs d WHERE year_id = 3 AND salary_base IS NOT NULL AND location = 5 AND job_id IN ('45','46','47','48')) AS t2, (SELECT MIN(salary_base) AS minimum FROM data_jobs d WHERE year_id = 3 AND salary_base IS NOT NULL AND location = 5 AND job_id IN ('45','46','47','48')) AS t3, (SELECT AVG(salary_base) AS av FROM data_jobs d WHERE year_id = 3 AND salary_base IS NOT NULL AND location = 5 AND job_id IN ('45','46','47','48')) AS t4 WHERE t1.row_number >= total*0.5 LIMIT 1


Mógłbym zrobić
  1. SET @rownum:=0

ale to i tak nie pomoże. Problemem jest
  1. @rownum:=@rownum+people_counter

który pomija mi where z jakiegoś powodu. Problem występuje tylko jeśli użyję IN. W przypadku where job_id = 45 nie ma problemu.
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: 20.12.2025 - 21:41