Многопользовательский вопрос для начинающих - PullRequest
2 голосов
/ 22 февраля 2011

Есть 3 таблицы для небольшой торговой системы; ПОЛЬЗОВАТЕЛИ , ПУНКТЫ и ТОРГОВЛИ , сами сделки хранятся в таблице ТОРГОВ (достаточно логично), как:

column     type
========== =====
seller_id  int
buyer_id   int
item_id    int
quantity   int
cost       int
currency   int

Я хочудля отображения ожидающих сделок, используя трехстороннее объединение, чтобы сопоставить идентификаторы с именами в таблицах USER и ITEM.Пока что у меня есть:

SELECT
    users.name AS seller,
    items.id AS item_id,
    items.name AS item,
    trades.item_id AS trade_id,
    trades.quantity AS quantity,
    trades.cost AS cost,
    trades.currency AS currency 
FROM
(trades INNER JOIN users ON trades.seller_id = users.id) 
INNER JOIN items ON trades.item_id = items.id 
WHERE trades.buyer_id = xxx

Первое объединение работает нормально, но как только я передаю результат второму, оно завершается неудачей;возвращает ноль данных.Я готов к тому, что это настоящая проблема новичка (на самом деле, я надеюсь, что это легко исправить = хорошо), но я не вижу этого (вероятно, потому что я на самом деле нуб в этих вещах).

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011
SELECT 
      users.name AS seller, 
      items.id AS item_id, 
      items.name AS item, 
      trades.item_id AS trade_id, 
      trades.quantity AS quantity, 
      trades.cost AS cost, 
      trades.currency AS currency   
FROM 
      trades
LEFT JOIN 
      users 
ON 
      trades.seller_id = users.id
LEFT JOIN 
      items 
ON 
      trades.item_id = items.id
WHERE trades.buyer_id = xxx 
1 голос
/ 22 февраля 2011

Я думаю, что trades_id должен быть trades.item_id

Я также советую вам использовать LEFT JOIN вместо INNER JOIN, используйте INNER JOIN, только если вы хотите вызвать ошибку, если совпадения нет. Когда вы используете LEFT JOIN, он всегда возвращает данные, даже если во второй таблице нет совпадений. Смотри: http://www.w3schools.com/Sql/sql_join.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...