В двух словах, есть 3 таблицы в БД:
Мне нужно достать имена из 2 таблицы (колонка firstname
), количество опыта из 1 таблицы (колонка exp
) и проверить чтобы id игрока было в 3 таблице (в колонке user1
или user2
).
Мой запрос:
SELECT
f.exp AS Exp,
u.firstname AS Name
FROM farmer f
JOIN customer u ON f.userId = u.customer_id
JOIN friendship fr ON fr.user1 = 33 OR fr.user2 = 33
ORDER BY (f.exp) DESC
Он работает, но получаются дубли. Что я сделал не так?
Ответ:
В итоге у меня получился вот такой запрос. Это выборка списка друзей и тех кто добавляется в друзья к игроку, которая берется из трёх таблиц.
SELECT DISTINCT
userId as id,
exp,
oc_customer.firstname as name,
CONCAT(IFNULL(fr1.question,''),IFNULL(fr2.question,'')) as status,
CONCAT(IFNULL(fr1.user2,''),IFNULL(fr2.user2,'')) as inviter
FROM farmer
LEFT JOIN oc_customer ON customer_id=userId
LEFT JOIN friendship as fr1 ON fr1.user1='$userId'
AND (fr1.question=2 OR fr1.question=1) AND fr1.user2=userId
LEFT JOIN friendship as fr2 ON fr2.user1=userId
AND (fr2.question=2 OR fr2.question=1)AND fr2.user2='$userId'
WHERE userId!='$userId'
AND ((fr1.question=2 OR fr1.question=1) OR (fr2.question=2 OR fr2.question=1))
ORDER BY (exp)
DESC
status - 2 (друг), status - 1 (запрос в друзья), inviter (тот кто отправил запрос)
Для того, чтобы получить уникальные значения, следует использовать SELECT DISTINCT ...
Из документации:
The ALL and DISTINCT modifiers specify whether duplicate rows should be returned. ALL (the default) specifies that all matching rows should be returned, including duplicates. DISTINCT specifies removal of duplicate rows from the result set. It is an error to specify both modifiers. DISTINCTROW is a synonym for DISTINCT.
Это значит, что если использовать SELECT
без указания DISTINCT
или DISTINCTROW
, то будет использоваться модификатор ALL
и будут выданы все совпадающие записи.
Ссылка на документацию.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здесь на сайте нашёл вопрос и к нему очень интересный комментарий, что функции mysql_query не существуетНо я её использую, и она есть в php
Пытаюсь сделать запрос к БД и получить данные в JSON формате делаю так, но открывается пустая страница без ничего, хотя в таблице есть куча записейОколо...
В коде один и тот же запрос sql, повторяется несколько раз в коде, как можно сократить код что бы не каждый раз его заново написать, в функции...