Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlanie kilku wierszy za pomocą jednej kwerendy
dragonsokol
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 23.06.2008

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


Witam. Posiadam następujący problem - wyszukuje pewne produkty za pomocą kwerendy
  1. SELECT * FROM `products` WHERE `id` IN (SELECT `promoted` FROM `promoted` WHERE `id` = 1);

`promoted` zapisuje w formacie zgodnym z formatem IN, tj. np. 10,13,15,16,17,18,20,21 .
Do niedawna działało wspaniale, niestety po którejś z aktualizacji MySQL taki sposób przestał działać i wyświetla się tylko jeden produkt (pierwszy w `promoted` czyli w przykładzie produkt o ID 10).
Co robić by uniknąć tego problemu i nie dzielić tego na dwie kwerendy i explode w PHP?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
alegorn
post
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


samo zapytanie w sobie wyglada na prawidlowe (nieoptymalne, ale prawidlowe)

sprawdz co zwraca ci subquery :
  1. SELECT `promoted` FROM `promoted` WHERE `id` = 1
po mojemu powinien zwraca ci jeden rekord, wiec i glowne zapytanie zwraca ci jeden rekord.

odpowiadajac na pytanie, czy da sie uniknac dzielenia na kilka etapow,: da sie ale po co? w zaleznosci od maszyny, na jakiej masz serwer - mozesz uzyskac wzrost wydajnosci

podzapytania w mysql spowalniaja, i to znacznie.

jesli bardzo nie chcesz - mozesz wykorzystac polecenie
  1. prepare
<< doczytaj sobie w manualu.

poza tym, w php to raczej implode niz explode wink.gif

j.
Go to the top of the page
+Quote Post
dragonsokol
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 23.06.2008

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


W `promoted` mam produkty zapisane w postaci 1,2,3,4 (tj. oddzielonej przecinkami) i chcę wyszukać produkty, które są właśnie w tej kolumnie. Mogę zapisywać na inny sposób, jednakże muszą być w jednym wierszu by zachować spójność danych. Myślałem nad REGEXP, co wy na to?

Edit:
Udało się rozwiązać problem za pomocą FIND_IN_SET(). Pozdrawiam smile.gif

Ten post edytował dragonsokol 1.06.2012, 22:04:15
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: 20.08.2025 - 17:21