выбрать несколько таблиц в одном запросе SQL - PullRequest
0 голосов
/ 21 февраля 2011

Другие темы об этом, похоже, не помогли мне. Я хочу выделить всю информацию из одной таблицы, но упорядочить ее по значению в другой таблице.

ВЫБРАТЬ сообщение,
date
ф
имя,
сайт,
ID
ОТ guestbook_message
ГДЕ удалено = 0
И дата> DATE_SUB (СЕЙЧАС (), ИНТЕРВАЛ 1 ДЕНЬ)
ЗАКАЗАТЬ НА date DESC ";

За исключением того, что мне нужно ORDER BY 'votes' DESC;, который находится в другой таблице под названием m_votes.

Возможно ли это сделать? Я читал на другом сайте, что этот запрос невозможен.

$ запрос = "SELECT g.message, g.date, g.ip, g.name, g.website, g.id ОТ guestbook_message AS g ПРИСОЕДИНЯЙТЕСЬ к m_votes AS v ON g.id = v.vid ГДЕ g.deleted = 0 AND v.messageid = $ mid AND g.date> DATE_SUB (NOW (), INTERVAL 1 DAY) ЗАКАЗАТЬ ПО СУММЕ (v.votes) DESC; "

^^ Это не работает

Ответы [ 4 ]

5 голосов
/ 21 февраля 2011

Вам необходимо присоединиться:

SELECT
     g.message,
     g.date,
     g.ip,
     g.name,
     g.website,
     g.id 
FROM guestbook_message AS g
LEFT JOIN m_votes AS v
ON g.id = v.message_id
WHERE g.deleted = 0 
AND g.date > NOW() - INTERVAL 1 DAY
GROUP BY g.id
ORDER BY COUNT(v.message_id) DESC
1 голос
/ 21 февраля 2011

Вы должны объединить данные, то есть вам нужно иметь голоса за каждое сообщение в гостевой книге.

Предположим, для простоты у вас есть следующие таблицы:

Message
----
id INT
messsageText VARCHAR(5000)

и

MessageVotes
------------
messageId INT (references the `id` column in table Message)
voteValue INT (suppose it can be +1 or -1, whatever)
votingIp  VARCHAR(100)

Тогда вы могли бы сделать что-то вроде

SELECT
  m.id,
  m.messageText,
  SUM(mv.voteValue) AS votes
FROM
  Message AS m,
  MessageVotes AS mv
WHERE
  mv.messageId = m.id
GROUP BY
  m.id, m.messageText /* here you need to place every field you `select` from Message */
ORDER BY
  SUM(mv.voteValue) DESC

или даже лучше:

SELECT
  m.id,
  m.messageText,
  SUM(mv.voteValue) AS votes
FROM
  Message AS m
  LEFT JOIN MessageVotes AS mv ON mv.messageId = m.id
GROUP BY
  m.id, m.messageText
ORDER BY
  SUM(mv.voteValue) DESC

См .:

1 голос
/ 21 февраля 2011

Я немного новичок, и для меня это очень сложный запрос, так как он должен найти сумму «голосов» в m_votes и упорядочить по ней.А также получить информацию из другого запроса.Это запрос, который получает информацию о сообщении:

 "SELECT message,  
         `date`,  
         ip,  
         name,  
         website,  
         id   
  FROM `guestbook_message`   
  WHERE deleted = 0   
     AND date > DATE_SUB(NOW(), INTERVAL 1 DAY)   
  ORDER BY `date` DESC";  

И это запрос, который получает информацию о голосах:

"SELECT SUM(votes) as votes FROM m_votes WHERE messageid = $mid"

Но я понятия не имею, кто япоместит их в один запрос, который соберет всю информацию из первого запроса, а затем закажет их голосованием.

0 голосов
/ 03 июля 2016

Пожалуйста, попробуйте ниже запрос, вы пропустили группу по предложению.

    SELECT g.message, 
        g.date, 
        g.ip, 
        g.name, 
        g.website, 
        g.id 
    FROM guestbook_message AS g 
    JOIN m_votes AS v ON g.id = v.vid 
    WHERE g.deleted = 0 
        AND v.messageid = $mid 
        AND g.date > DATE_SUB(NOW(), INTERVAL 1 DAY) 
    GROUP BY g.message, 
        g.date, 
        g.ip, 
        g.name, 
        g.website, 
        g.id
    ORDER BY SUM(v.votes) DESC;
...