Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Join a ilość rekordów - problem
rzymek01
post
Post #1





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


Witam!

Skonstruowałem sobie zapytanie:

  1. 'SELECT c.name
  2. FROM '.PX.'categories as c
  3. LEFT JOIN '.PX.'categories as c2 ON c2.id = '.$cid.'
  4. LEFT JOIN '.PX.'maincat as mc ON mc.id = c2.maincat_id
  5. WHERE c.id IN (SUBSTRING_INDEX(mc.children_ids, CONCAT(",", "'.$cid.'"), 1))';


zakładając, że $cid to 5 i że wynikiem funkcji SUBSTRING_INDEX jest `1,3,4`, uproszczam zapytanie do:
  1. 'SELECT c.name
  2. FROM categories as c
  3. LEFT JOIN categories as c2 ON c2.id = 5
  4. LEFT JOIN maincat as mc ON mc.id = c2.maincat_id
  5. WHERE c.id IN (1,3,4)';


i teraz działa, lecz jak znowu zamienię 1,3,4 na SUBSTRING_INDEX(mc.children_ids, CONCAT(",", "'.$cid.'"), 1), którego wynikiem też jest 1,3,4 to pokazuje tylko jeden rekord zamiast 3...



Pozdrawiam i z góry dziękuję!

Ten post edytował rzymek01 26.05.2008, 15:15:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rzymek01
post
Post #2





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


rozumiem, dzięki wielkie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

wczoraj byłem jakiś ciężki (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)


//edit:
działa, tylko wadą tego rozwiązania jest nieoptymalność takiej operacji, bo w przypadku IN wybiera podane rekordy, a w INSTR sprawdza wszystkie rekordy co przy dużej liczbie kategorii może znacznie wydłużyć czas takiego zapytania

Ten post edytował rzymek01 27.05.2008, 17:11:09
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 18:59