2013-08-19 2 views
-1

Я получаю правильный ответ от этого.Использование WHERE и BETWEEN

SELECT *, studentid, COUNT(studentid),be_user_profiles.first_name, 
be_user_profiles.last_name    
FROM be_user_profiles 
LEFT JOIN hw_homework 
ON be_user_profiles.user_id= hw_homework.studentid 
WHERE be_user_profiles.advisor = $id 
GROUP BY be_user_profiles.user_id 
ORDER BY COUNT(studentid) DESC 

Я хочу сортировать между определенными датами. Но если я добавлю BETWEEN, это даст ошибку.

SELECT *, studentid, COUNT(studentid),be_user_profiles.first_name, 
be_user_profiles.last_name 
FROM be_user_profiles 
LEFT JOIN hw_homework 
ON be_user_profiles.user_id= hw_homework.studentid 
WHERE be_user_profiles.advisor = $id 
AND WHERE hw_homework.date >= $from AND <= $to // neither AND WHERE hw_homework.date BETWEEN $from AND $to 
GROUP BY be_user_profiles.user_id 
ORDER BY COUNT(studentid) DESC"; 

Моя таблица выглядит следующим образом.

CREATE TABLE IF NOT EXISTS `hw_homework` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `studentid` int(10) NOT NULL, 
    `subjectid` int(10) NOT NULL, 
    `assignment_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `teacherid` int(10) NOT NULL, 
    `date` datetime NOT NULL, 
    `date_completed` datetime DEFAULT NULL, 
    `approved` int(1) unsigned NOT NULL DEFAULT '1', 
    `entered_by` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=977 ; 

-- 
-- Dumping data for table `hw_homework` 
-- 

INSERT INTO `hw_homework` (`id`, `studentid`, `subjectid`, `assignment_name`, `teacherid`, `date`, `date_completed`, `approved`, `entered_by`) VALUES 
(2, 128, 4, 'Asdf', 59, '2012-11-08 00:00:00', NULL, 1, 0), 
(3, 96, 12, 'In Class Essay Practise', 67, '2012-11-09 00:00:00', NULL, 1, 0), 
(4, 96, 11, 'Creating Want ', 64, '2012-11-09 00:00:00', NULL, 1, 0), 
(5, 119, 13, '6A, Q1, 6B, Q1~Q3', 20, '2012-11-12 00:00:00', NULL, 1, 0), 
... 
... 

Сообщение об ошибке

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near '00:00:00 AND 2013-06-14 
00:00:00 GROUP BY be_user_profiles.user_id ' at line 6 

SELECT *, studentid, COUNT(studentid),be_user_profiles.first_name, 
be_user_profiles.last_name FROM be_user_profiles LEFT JOIN hw_homework ON 
be_user_profiles.user_id= hw_homework.studentid WHERE be_user_profiles.advisor = 20 
AND hw_homework.date BETWEEN 2012-08-23 00:00:00 AND 2013-06-14 00:00:00 GROUP BY 
be_user_profiles.user_id ORDER BY COUNT(studentid) DESC 

Я признателен, если кто-то может сказать мне, что я делаю неправильно, как это сделать.

Заранее спасибо.

+0

«он дает ошибку.» И вам не пришло добавить эту ошибку здесь? Это может помочь ... – Nanne

+0

Я не понимаю, почему я получаю здесь -1? – shin

+0

Либо по той же причине, что я опубликовал комментарий (никогда не упоминал об ошибке), или для лица, которое показывает ошибка, вы используете другой запрос, тогда вы говорите, что используете ->, пожалуйста, разместите точный запрос (и не добавьте комментарий на полпути), что приводит к ошибке? – Nanne

ответ

1

Есть несколько вещей, которые не соответствуют вашему запросу, может быть, вам стоит взглянуть на руководство?

WHERE be_user_profiles.advisor = $id 
AND WHERE hw_homework.date >= $from AND <= $to // neither AND WHERE hw_homework.date BETWEEN $from AND $to 
  1. вам нужно только 1, где:

    WHERE be_user_profiles.advisor = $id 
    AND hw_homework.date >= $from AND <= $to // neither AND WHERE hw_homework.date BETWEEN $from AND $to 
    
  2. я не уверен, что комментарий о:

    WHERE be_user_profiles.advisor = $id 
    AND hw_homework.date >= $from AND <= $to 
    
  3. Вы должны добавить ' вокруг даты:

    WHERE be_user_profiles.advisor = $id 
    AND hw_homework.date >= '$from' AND <= '$to' 
    
  4. и, наконец, вам нужно добавить столбец в <=

    WHERE be_user_profiles.advisor = $id 
    AND hw_homework.date >= '$from' AND hw_homework.date <= '$to' 
    

Этот последний запрос должен работать.

После последнего редактирования: проблема с реальным запросом кажется для запуска является точкой 4: у вас нет ' вокруг даты

+0

Спасибо. # 4 должно быть WHERE be_user_profiles.advisor = $ id И hw_homework.date> = '$ from' AND hw_homework.date <= '$ to' – shin