Поможет ли LIMIT в моем случае?

Dimazsever
Дата: 26.12.2012 19:34:58
Приветствую всех. Есть такой запрос:
SELECT 
  cabinet.name_test, 
  a1.answer_id as answer_id, 
  a2.answer_id as answer_id2
FROM cabinet
  JOIN answers a1 ON a1.test_id = cabinet.test_id 
    AND a1.user_id = '184918649' AND a1.friend_id = '353281'
  LEFT JOIN answers a2 ON a2.test_id = cabinet.test_id
    AND a2.user_id = '353281'

Есть такая таблица:
Картинка с другого сайта.
Этот запрос выводит такую результирующую таблицу:
Картинка с другого сайта.
Как можно сделать, чтобы он не выводил строку с первым тестом два раза? Он должен найти только одну строку, то бишь седьмую и остановиться. Но он ищет дальше и находит еще совпадение в восьмой строке. LIMIT 1,2 в конце запроса не помогает. Точнее помогает, но тогда он выводит в результат последнее найденное совпадение, а не первое, то бишь строку 8.
miksoft
Дата: 26.12.2012 19:57:15
Дайте полную постановку задачи.
Учтите, что в таблице порядка записей нет. Соответственно, и полагаться на порядок вывода без явно указанной сортировки тоже нельзя.
Dimazsever
Дата: 26.12.2012 20:14:01
miksoft,
Первый юзер проходит тест и отправляет его второму юзеру, чтобы он тоже прошел его. Второй юзер проходит и отправляет уже другому юзеру и так по цепочке. Следовательно у второго условия запроса может быть найдено куча совпадений в таблице, так как этот тест может быть отправлен множеству других юзеров. Этот запрос предназначен, чтобы вывести информацию юзеру о том, что его друг прошел тест и какие id-ы ответов он выбрал. Но найти он должен только первую запись друга в таблице, так как в других id-ы ответов могут отличаться. Один раз он ответил так, а в следующий раз может ответить по другому. Чтобы не вводить в заблуждение, постоянно меняющимися id-ами ответов, по ходу отправки этого теста другим юзерам, должна выбраться только первая запись. Надеюсь понятно.
Не понял на счет того, что порядка записей нет. Получается он может начать искать откуда угодно? Ведь нет. Если ставить LIMIT 1, тогда он найдет только первую запись, а не последнюю или где нибудь в середине. Разве не так?
miksoft
Дата: 26.12.2012 20:24:50
Dimazsever
Не понял на счет того, что порядка записей нет. Получается он может начать искать откуда угодно?
Да, может.
Dimazsever
Если ставить LIMIT 1, тогда он найдет только первую запись, а не последнюю или где нибудь в середине. Разве не так?
Сейчас так, завтра может быть иначе. Достаточно измениться данным в таблице или немного изменить сам запрос.
Dimazsever
Дата: 26.12.2012 20:31:56
miksoft,
Получается, что моей задачи нет решения? Ведь задача по сути простая. Найти первую запись с первым тестом, записать, найти первую запись с вторым тестом, записать. Неужели это невозможно? Может тогда можно как-нибудь извратиться?
Dimazsever
Дата: 26.12.2012 20:34:59
Dimazsever
Если ставить LIMIT 1, тогда он найдет только первую запись, а не последнюю или где нибудь в середине. Разве не так?
Сейчас так, завтра может быть иначе. Достаточно измениться данным в таблице или немного изменить сам запрос.[/quot]
Если это так, тогда вообще не вижу смысла в операторе LIMIT. Зачем мне какая-то запись если нужна конкретная. Странно очень.
javajdbc
Дата: 26.12.2012 20:40:22
Dimazsever
miksoft,
Получается, что моей задачи нет решения? Ведь задача по сути простая. Найти первую запись с первым тестом, записать, найти первую запись с вторым тестом, записать. Неужели это невозможно? Может тогда можно как-нибудь извратиться?


ситуация достаточно проста: просто скажите:
-- если в базе две (или 3, или 10) похожих
записей --- какая из них "первая"?

подсказки -- некоторые из возможных вариантов:
-- первая по времени
-- первая по ИД
-- первая по весу тела хозяина,
-- первая по длине волны цвета волос респондента.
miksoft
Дата: 26.12.2012 20:41:35
Dimazsever
Если это так, тогда вообще не вижу смысла в операторе LIMIT.
Смысл появляется при явном указании сортировки (ORDER BY или GROUP BY). Кроме того, иногда кому-то достаточно и случайной записи, почему бы и нет?
Dimazsever
Дата: 26.12.2012 21:01:57
javajdbc,
Первая по id.) Ну у меня есть поле id. По логике он должен искать сверху вниз.
Dimazsever
Дата: 26.12.2012 21:10:15
miksoft
Dimazsever
Если это так, тогда вообще не вижу смысла в операторе LIMIT.
Смысл появляется при явном указании сортировки (ORDER BY или GROUP BY). Кроме того, иногда кому-то достаточно и случайной записи, почему бы и нет?

А поподробнее можно на этом моменте?