Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dwa warunki tego samego pola, czy tak można?
maciu
post 19.07.2004, 13:35:19
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


mam takie zapytanie do sql
  1. SELECT cms_page.id, cms_page.mtime FROM cms_page, cms_page_sections_assign WHERE cms_page.id=cms_page_sections_assign.pid AND cms_page_sections_assign.sid =6 AND cms_page_sections_assign.sid !=7 AND (
  2. cms_page.template_dir = "'.$url_szablonu['pop'].'" OR cms_page.template_dir = "'.$url_szablonu['rock'].'" OR cms_page.template_dir = "'.$url_szablonu['hiphop'].'" OR cms_page.template_dir = "'.$url_szablonu['techno'].'" OR cms_page.template_dir = "'.$url_szablonu['klasyka'].'"
  3. )
  4. ORDER BY id DESC LIMIT 8


Moje wątpliwości budzi kod
  1. cms_page_sections_assign.sid =6 AND cms_page_sections_assign.sid !=7

Czy mysql obsługuje w jednym zapytaniu dwa warunki do tego samego pola?
W tym zapytaniu nie sprawdza mi warunku cms_page_sections_assign.sid !=7.
Macie jakiś pomysł jak to zrobić, aby ten warunek również był brany pod uwage przy wyborze odpowiednich rekordów?
Go to the top of the page
+Quote Post
scanner
post 20.07.2004, 10:43:26
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Cytat(maciu @ 2004-07-19 14:35:19)
Moje wątpliwości budzi kod
  1. cms_page_sections_assign.sid =6 AND cms_page_sections_assign.sid !=7

Moje wątpliwosci też budzi.

"Jest równe 6 i nierówne 7" ? co chcesz osiągnąć?


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
maciu
post 20.07.2004, 12:54:53
Post #3





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


w tabeli cms_page_sections_assign może być kilka rekordów dotyczących tej samem strony(rozróznianego za pomocą innego pola w tabeli), i wtedy może mieć pole sid równocześnie wartość 6 i 7
Go to the top of the page
+Quote Post
kszychu
post 20.07.2004, 13:01:45
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


No dobra, ale zapis x = 6 AND x != 7 sprowadza się do zapisu x = 6!


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
maciu
post 20.07.2004, 14:25:47
Post #5





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


problem polega na tym, że wartości 6 i 7 są w osobnych rekordach i czy mysql potrafi to sprawdzić w jednym ruchu
Go to the top of the page
+Quote Post
kszychu
post 20.07.2004, 14:32:52
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Potrafi znależć rekordy, gdzie sid będzie równy 6 lub 7, albo będzie różny od 6 i różny od 7. Powiedz może jakie rekordy cię interesują, i wtedy ułoży sięodpowiednie zapytanie.
To o co pytasz jest możliwe, ale Twój warunek nie ma sensu.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
maciu
post 20.07.2004, 15:35:25
Post #7





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


wyjaśnię to dokładniej
tabela cms_page_sections_assign składa się z pół id, pid(id z cms_page), sid
czyli mamy np, takie rekordy w tej tabeli:
id pid sid
4 23 6
6 23 7
7 25 4
8 24 6

chodzi o to, żeby zapytanie zwróciło te PID, które posiadają wartość 6 i nie posiadają wartości 7. W tym przypadku zwróci PID 24
Go to the top of the page
+Quote Post
kszychu
post 20.07.2004, 15:38:50
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Eeeeee, to trza było od razu, że mieszasz sid z id! Bo z przykładu domyśliłem się, że tak właśnie jest. Oto fragment zapytania:
  1. WHERE (id = 6 OR sid = 6) AND id != 7 AND sid != 7


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
maciu
post 20.07.2004, 16:23:47
Post #9





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


Kszychu nie zrozumiałeś. Pole id jest tylko polem porządkowym, jego wartość nie ma żadnego znaczenia w tym przypadku. Chodzi o to, aby znalazł te numery PID, które mają wartość 6 i jednocześnie nie mają wartości 7. Czyli w tym przykładzie, który podałem zwróci PID=24
Go to the top of the page
+Quote Post
mtr
post 23.07.2004, 08:17:14
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 21.07.2004

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


maciu:
Chyba Ty coś namieszałeś winksmiley.jpg .
Skoro id nie ma żadnego znaczenia, to w twoim przykładzie takze pierwsza krotka ma wartość 6, i zwroci PID=23.
Czyli jak na moj gust :

  1. SELECT cms_page.id, cms_page.mtime FROM cms_page, cms_page_sections_assign WHERE cms_page.id=cms_page_sections_assign.pid AND cms_page_sections_assign.sid =6


Jesli to jednak nie to, to sproboj jeszcze jaśniej wyjaśnić pytanie smile.gif

pozdrawiam
Go to the top of the page
+Quote Post
maciu
post 23.07.2004, 10:16:16
Post #11





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


podam jeszcze raz przykład, tym razem bez id bo starsznie Wam to miesza

tabela cms_page_sections_assign
PID SID
24 6
24 7
22 6
30 7
31 6

pole PID jest równe: cms_page.id=cms_page_sections_assign.pid
SID przyjmuje wartość od 1 do 7
Wartość pola PID może się powtarzać, ponieważ strona (prowadzi do niej indeks PID) może mieć przypisane kilka różnych wartości SID (jak w przykładzie PID=24 ma przypisane dwie wartości SID 6 i 7)

I teraz potrzebuje, aby wybrał mi rekordy takie w których ten sam PID ma wartość 6, ale nie ma wartości 7, czyli coś takiego:
  1. cms_page_sections_assign.sid =6 AND cms_page_sections_assign.sid !=7

tylko, że sql sprawdza tylko ten pierwszy warunek.
Go to the top of the page
+Quote Post
scanner
post 23.07.2004, 11:59:46
Post #12





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Cholera człowieku.
Pomyśl logicznie.

Jeśli coś ma wartość 6 to ZAWSZE NIE MA wartości 7. Rozumiesz?

Plączesz się jak sznurek od tampaxa. Zalecam weekebdową przerwę od komputera.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
kszychu
post 23.07.2004, 12:35:43
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Spokojnie chłopaki, smile.gif))))
Ja zajarzyłem o co chodzi, ale niestety nie potrafię mu pomóc. Spróbuję wyjaśnić, może ktoś będzie wiedział.
Otóż są pola:
PID SID
24 6
24 7
22 6
30 7
31 6

No i ten nieszczęsny PID = 24 występuje dwa razy; raz jego SID jest równy 6, a poniżej, w drugim wpisie jest równy 7. I teraz chodzi o to, by wyłapać wszystkie numery PID, dla których numer SID jest równy 6, ale jako że może on przyjąć jeszcze inne wartości, to żadna z tych innych wartości ni może być równa 7. W tym przypadku, dla PID równego 24 SID wynoszą 6 i 7, więc drugi warunek jest niespełniony.
Tylko jak to opisać w SQLu, niestety nie wiem.

Pozdrawiam


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
maciu
post 23.07.2004, 12:43:39
Post #14





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


kszychu dokładnie o to mi chodzi.

A ty scanner, jak nie potrafisz zrozumieć moich postów to na nie nie odpowiadaj, a nie będziesz się dąsał. Inni potrafią zrozumieć, więc to ja Tobie zalecam weekendowy odpoczynek od kompa.
Go to the top of the page
+Quote Post
Parti
post 23.07.2004, 13:49:11
Post #15





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 22.07.2004

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


Cytat(kszychu @ 2004-07-23 11:35:43)
Tylko jak to opisać w SQLu, niestety nie wiem.

Trzeba uzyc podzapytania.

  1. SELECT * FROM tab WHERE sid = 6 AND pid NOT IN (SELECT pid FROM tab WHERE sid = 7)


Cos takiego.

Nie sprawdzalem tego zapytania, bo nie mam w tym momencie dostepu do bazy mysql, ktora obslugiwala by podzapytania (ver 4.1.x zdaje sie)

Ten post edytował Parti 23.07.2004, 13:51:02
Go to the top of the page
+Quote Post
maciu
post 28.08.2004, 14:23:52
Post #16





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


czy da się to zrobić nie używając podzapytań, bo niestety mam starą wersję myslq'a?
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 - 01:47