Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie kilku wierszy za pomocą jednej kwerendy
Forum PHP.pl > Forum > Bazy danych > MySQL
dragonsokol
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?
alegorn
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.
dragonsokol
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
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.