2013-11-27 2 views
0

Мое описание таблица выглядит следующим образомDistinct сортировки для различных типов в PHP

**entry_table** 

- serial(int) 
- s_name(varchar) 
- user_id(int) 
- id(int) 

**Students_details** 

- id(int) 
- user_id(int) 
- student_name(varchar) 
- adress(varchar) 

**User_login** 

- user_id(int) 
- user_name(varchar) 
- password(varchar) 
- alotment(bool) 

Сценарий является то, что студенты применяют для нескольких стипендий. Их выбор хранится в полях s_name, user_id и id entry_table.

Следующий шаг - создать отсортированный список всех студентов, подавших заявку на получение определенной стипендии, например: «Ученость1».

Этот список должен также показать имя студента (student_name поле таблицы students_details)

Списков должны быть отсортированы по двум видам стипендий, которые предлагают систему (заслуги и необходимость). Заявители стипендии по достоинству должны сортироваться в порядке убывания с использованием соотношения (полученные оценки/итоговые оценки). Тем не менее, потребность Стипендия должна быть замкнута в порядке возрастания, как он использует соотношение (семейный доход/нет. Из-зарабатывающих, не являющихся членами семьи)

Я попытался присоединиться к моим таблицам с помощью

$query = "SELECT *FROM entry_table, students_details 
WHERE entry_table.id=students_details.id 
    group by entry.s_id,entry.student_id"; 

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

поблагодарить Вас заранее

+0

Обратите внимание, что выбор из нескольких таблиц, соединенных предложением WHERE, является способом «oldfashioned» для этого. Вы можете взглянуть на JOIN ONs. – Aquillo

+0

Я не уверен, что это «старомодный», но он немодный! Кроме того, при отсутствии каких-либо агрегирующих функций использование предложения GROUP BY неуместно. Кроме того, ваш дизайн кажется принципиально ошибочным. У вас должна быть таблица студентов, таблица стипендий и таблица, которая относится друг к другу. – Strawberry

+0

И имеет ли каждая стипендия как «необходимость», так и «заслуга», связанные с ней? * И * является студентом, который подает заявку на то, что он не может подать заявку на другого? – Strawberry

ответ

1
select * from entry_table inner join students_details on entry_table.id=students_details.id order by entry.student_id asc; 
+0

Пожалуйста, добавьте некоторое объяснение. – DontVoteMeDown

0

Первое, что вы должны соединить таблицы должным образом.

$query = "SELECT sd.student_name, et.s_name FROM Student_details AS sd LEFT JOIN 
entry_table AS et ON et.user_id = sd.user_id LEFT JOIN 
user_login AS ul ON ul.user_id = sd.user_id 
WHERE et.s_name = 'merit' 
ORDER BY et.s_name DESC 
UNION ALL 
SELECT sd.student_name, et.s_name FROM Student_details AS sd LEFT JOIN 
entry_table AS et ON et.user_id = sd.user_id LEFT JOIN 
user_login AS ul ON ul.user_id = sd.user_id 
WHERE et.s_name = 'need' 
ORDER BY et.s_name ASC" 

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

Используйте Join вместо этого, чтобы соединить таблицы, имеет больше смысла и улучшает производительность запросов. В следующий раз, поместите SQL-код таблицы, более полезно дать лучший ответ.

Извините за мой английский !!!

Смежные вопросы