Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z relacją w WHERE
Andrzej20
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 3.11.2006

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


Hej,

Mam 2 tabele (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W tabeli `xPosts` mam pole `id`, w tabeli `xCategories` mam pole `category_id`. Robiłem sobie zapytanie, które zliczało mi ilość takich rekordów w tabeli `xPosts`, które w polu `category_id` zawierały odpowiedniego id-ka z pola `id` w tabeli `xCategories`. Poniższe zapytanie powinno wyjaśnić to udało mi się zrobić:

  1. SELECT COUNT(xPosts.id) FROM xPosts WHERE xCategories.id = xPosts.category_id;


Super, działa! Problem w tym, że z pewnych przyczyn musiałem zmienić nieco sposób przetrzymywania id-ków w polu `xPosts.category_id` i teraz nie są to pojedyncze liczby, ale string w formacie "1,13,54,[...]". No i w tym momencie mam problem, którego nie potrafię rozwiązać, ponieważ oczywiście relacja przestała działać. Próbowałem zmodyfikować zapytanie, ale nie działa:

  1. SELECT COUNT(xPosts.id) FROM xPosts WHERE xCategories.id LIKE "%xPosts.category_id%";


Jak zbudować ten warunek, aby przeszukiwał stringa w polu `xPosts.category_id` w poszukiwaniu zadanych `id` z tabeli `xCaterogies`?

Tak, jestem SQLowym leszczem. Czy mimo to mogę liczyć na Waszą pomoc? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrowienia
Andrzej
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
Super, działa! Problem w tym, że z pewnych przyczyn musiałem zmienić nieco sposób przetrzymywania id-ków w polu `xPosts.category_id` i teraz nie są to pojedyncze liczby, ale string w formacie "1,13,54,[...]". No i w tym momencie mam problem, którego nie potrafię rozwiązać, ponieważ oczywiście relacja przestała działać.

I to był błąd, bo powinieneś dodać dodatkową tabelę, w której mógłbyś tworzyć relacje xPost.id -> xCategory.category_id, bo rozumiem, że problem polegał na tym, że jedno coś tam z tabeli xPosts mogło należeć do więcej niż jednej kategorii, tak?

Zamiast kombinować z tworami w stylu listy kategorii rozdzielonej przecinkami, lepiej dodaj sobie tę tabele pośrednią.

Cytat
Tak, jestem SQLowym leszczem. Czy mimo to mogę liczyć na Waszą pomoc?

Dlaczego wszyscy początkujący na tym forum, jak mają jakieś problemy i piszą pierwsze posty, jadą z takimi tekstami: "Wiem, jestem cienki" , "Tak, wiem, nic nie umiem" i podobne... Macie jakieś kompleksy czy jak?

Qrde, nikt nie urodził się jako guru PHP.
Go to the top of the page
+Quote Post
gutek84
post
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 9.10.2007
Skąd: Morąg

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


do takiej struktury jaka stworzyles zamiast

  1. xCat.id = xPost.cat_id

mozna dac

  1. xCat.id IN (xPost.cat_id)


pod warunkiem ze pole xPost.cat_id wyglada tak: 1,2,3...n

Ten post edytował gutek84 11.08.2009, 14:32:40
Go to the top of the page
+Quote Post
Andrzej20
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 3.11.2006

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


Cytat(gutek84 @ 11.08.2009, 15:29:05 ) *
  1. xCat.id IN (xPost.cat_id)



Niestety, nic to nie daje (IMG:style_emoticons/default/sad.gif) Struktura pola jest taka jak napisałeś, tzn 1,2,3, itd, ale nie wiedzieć czemu zliczane są tylko pierwsze wartości, tzn np dla pola "6,13,7,8" brana jest pod uwagę tylko 6-tka, nie wiem w czym problem :/
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: 23.08.2025 - 21:36