Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Problem z sortowaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
Crozin
Pisze mini-forum do prostego CMS'a.
Mam tabele forumtopics:
ID | Subject | Created | PostedBy | Readed

W PostedBy jest ID usera który napisał temat, a w Readed będą ID userów którzy przeczytali temat - czyli pole Readed moze wygladac np. tak:
Cytat
1 33 4 67 68 5 4

co oznacza ze userzy z w/w ID przeczytali temat.

I teraz chciałbym przy wybieraniu listy tematów z forum odpowiednio ja posortować. Chciałbym też (o ile to w ogole możliwe zrobic to w zapytaniu, a nie w php).

Mam zapytanie:
  1. SELECT * FROM forumtopics ORDER BY Created DESC

Powyższe zapytanie działa dobrze, ale jak dodać do niego "takie cos", co by dodatkowo na poczatku ustawialo te rekordy w których, w polu Readed znajduje się ID aktualnie zalogowanego usera?

Domyślam się, że będe musiał dodać cos w stylu:
  1. ...LIKE ' 666 '...

gdzie 666 to ID aktualnie zalogowanego usera
wipo
Moim zdaniem złe podejście do tematu
Ja zrobił bym dodatkową tabele readed (id_user, Id_topic)
gdzie będą odpowiednie wpisu kto czytał
a potem
  1. SELECT * FROM forumtopics WHERE id IN (SELECT id_topic FROM readed WHERE id_user=$user) ORDER BY Created DESC


Nie zapomnij oczywiście o kluczach aby te zapytania się wykonywały szybko
Crozin
szczerze powiedziawszy to na sql'u (wogole na bazach danych) za dobrze sie nie znam... tak wiec dla jakich pol powinny byc ustawione owe klucze? tongue.gif
przy zalozeniu ze tabele maja taka strukture:
users - ID | UserName | Password | inne ale nie potrzebne
forumtopics - ID | Subject | Created | PostedBy
readedtopics - UserID | TopicID
wipo
klucze zakładasz na komórki które łączysz
wpisz
  1. EXPLAIN SELECT * FROM forumtopics WHERE id IN (SELECT id_topic FROM readed WHERE id_user=$user) ORDER BY Created DESC

to sql podpowie Ci czy dane komórki posiadają klucze i czy są one odpowiednie
Crozin
  1. EXPLAIN SELECT * FROM forumtopics WHERE ID IN (SELECT TopicID FROM forumreaded WHERE UserID=1) ORDER BY Created DESC

zwrocilo mi:
Kod
Array
(
    [0] => Array
        (
            [id] => 1
            [select_type] => PRIMARY
            [table] => forumtopics
            [type] => ALL
            [possible_keys] =>
            [key] =>
            [key_len] =>
            [ref] =>
            [rows] => 20
            [Extra] => Using where; Using filesort
        )

    [1] => Array
        (
            [id] => 2
            [select_type] => DEPENDENT SUBQUERY
            [table] =>
            [type] =>
            [possible_keys] =>
            [key] =>
            [key_len] =>
            [ref] =>
            [rows] =>
            [Extra] => Impossible WHERE noticed after reading const tables
        )

)

niestety nie mowi mi to niczego :E
wipo
Jak byś poczytał dokumentacje to byś zrozumiał
users - ID | UserName | Password |
forumtopics - ID | Subject | Created | PostedBy
readedtopics - UserID | TopicID

klucze bym założył na UserID i users.ID
a drugi na TopicID i forumtopics.ID
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.