Mysql
 sql >> база данни >  >> RDS >> Mysql

подобряване на заявката за статии, свързани с MySQL

Първо, моля да ме извините, че промених малко имената на таблиците на message и message_tag за четливост.

Второ, не съм тествал това. Използвайте го по-скоро като указател, отколкото като категоричен отговор.

Заявката използва две подзаявки, които може да не са толкова ефективни, вероятно има място за подобрение. Първо, най-вътрешната заявка търси етикетите на текущото съобщение. След това средната заявка търси съобщения, които са маркирани с поне един общ етикет. Групирането се използва за получаване на уникален message_id и подреждането им по брой общи тагове. Последно, JOIN се използва за зареждане на допълнителни подробности и за филтриране на старите съобщения.

Може да забележите, че използвах въпросителни знаци вместо '$xyz' . Това е, за да се избегне грижата за избягване на съдържанието на променливата.

SELECT message_id, title, date
FROM message
RIGHT JOIN (SELECT message_id, COUNT(*)
            FROM message_tag
            WHERE tag_id IN 
                (SELECT MT.tag_id FROM message_tag MT WHERE MT.message_id = ?)
            GROUP BY message_id
            ORDER BY COUNT(*) DESC) RELATED_MESSAGES
            ON message.message_id = RELATED_MESSAGES.message_id
WHERE date < ?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете обекти чрез извикване на съхранена процедура с Spring Data

  2. Външен ключ на MySQL в таблица в друга база данни?

  3. Подреждане по подразбиране в MySQL (ALTER TABLE ... ORDER BY ...;)

  4. Намиране на най-близкото числово съвпадение в база данни с това, което потребителят е въвел в php

  5. Как да предадете име на вход чрез GET заявка в PHP