2013-07-02 4 views
0

У меня есть запрос, как это:SELECT DISTINCT один столбец, но вернуть все

$sql_place = "SELECT * FROM place 
INNER JOIN join_appointment_place 
ON join_appointment_place.id_place = place.id_place 
INNER JOIN join_event_appointment 
ON join_appointment_place.id_appointment = join_event_appointment.id_appointment 
WHERE join_event_appointment.id_event = " . $EVENT_ID . " 
ORDER BY place.title, place.category"; 

Проблема заключается в том, что мне нужно, чтобы вернуть все места с различными titles. Поэтому я должен использовать DISTINCT. Но как я могу выбрать DISTINCTtitle и в то же время вернуть все остальные значения?

$sql_place = "SELECT 
    DISTINCT 
    place.id_place, 
    place.avatar, 
    place.category, 
    place.title, 
    place.description, 
    place.address, 
    place.latitude, 
    place.longitude, 
    place.email, 
    place.web, 
    place.shared FROM place 
    INNER JOIN join_appointment_place 
    ON join_appointment_place.id_place = place.id_place 
    INNER JOIN join_event_appointment 
    ON join_appointment_place.id_appointment = join_event_appointment.id_appointment 
    WHERE join_event_appointment.id_event = " . $EVENT_ID . " 
    ORDER BY place.title, place.category"; 

Выше было то, что я пробовал. Но я беспокоюсь, что применяю DISTINCT не только к title, но и к каждой выбранной колонке, и это не то, что я ищу. Спасибо за любую помощь :)

+1

показать некоторые примеры данных с ожидаемыми результатами. Вероятно, вам придется сделать некоторую группировку, выбрав min/max других столбцов, если есть не повторяющиеся данные. – Tanner

+0

В таблице 'place' есть места с тем же названием? почему первый запрос не работает ... – Justin

+0

Это действительно помогло бы нам, если бы вы показали некоторые данные образца и желаемый результат. –

ответ

1

попытайтесь использовать GROUP BY place.title, если вы просто хотите получить этот титул.

+0

Мне не нужно получать только заголовки, Мне нужно выбрать все места, но только те, у кого есть разные названия .. вот что я ищу –

-1

Если вы заинтересованы, вы можете использовать вложенный запрос.

Выберите отдельные заголовки и используйте результаты в предложении where внешнего запроса.

например.

SELECT * FROM Customers 
WHERE title IN (SELECT DISTINCT title FROM titles WHERE title > 'X'); 
+0

Можете ли вы привести пример? –

0

Да, в каждой колонке будет отображаться отчет, но это не плохо. Например, отличный запрос типа, который может вернуться:

Col1 Col2 Col3 Col4 
1  ABC  XYZ  Y 
1  ABC  XYZ  N 

Хотя ваш вопрос звучит так, как вы ожидаете, что это только получить различные значения для каждого столбца.

+0

Мне нужно выбрать все места, но только те, у кого разные названия. .Это то, что я ищу –

+0

** 'AND place.title in (выберите place.title из группы place by place.title с count (1) = 1)' ** Поместите это в ** 'where' ** статья – Luv

0

Правильный запрос - GROUP BY Спасибо в любом случае.

$sql_place = "SELECT * FROM place 
        INNER JOIN join_appointment_place ON join_appointment_place.id_place = place.id_place 
        INNER JOIN join_event_appointment ON join_appointment_place.id_appointment = join_event_appointment.id_appointment 
        WHERE join_event_appointment.id_event = " . $EVENT_ID . " 
        GROUP BY place.title ORDER BY place.title, place.category"; 
+0

Рассмотрите возможность принятия ответа Drixson, если она решит вашу проблему. – ydaetskcoR