Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Возможно, необходимо попробовать включая четвертый столбец, заявив таблицу, из которой он прибыл, и затем закажите и группа им:
SELECT A,B,C, "query 1" as origin FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C, "query 2" as origin FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C, "query 3" as origin FROM table WHERE field LIKE '%query%'
GROUP BY origin, B ORDER BY origin, B ASC LIMIT 5
Добавьте дополнительный столбец с трудно кодированными значениями, которые Вы будете использовать для сортировки полного набора результатов, как так:
SELECT A,B,C,1 as [order] FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C,2 as [order] FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C,3 as [order] FROM table WHERE field LIKE '%query%'
GROUP BY B ORDER BY [order] ASC, B ASC LIMIT 5
Можно ли сделать это как подвыбор, что-то как
SELECT * FROM (
SELECT A,B,C FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query%'
) ORDER BY B ASC LIMIT 5
ВЫБЕРИТЕ отличный a, b, c ОТ (ВЫБЕРИТЕ A, B, C, 1 как o таблица FROM, ГДЕ поле КАК 'ВЫБОР ОБЪЕДИНЕНИЯ' % запроса A, B, C, 2 как o таблица FROM, ГДЕ поле КАК '%query' ВЫБОР ОБЪЕДИНЕНИЯ A, B, C, 3 как o таблица FROM, ГДЕ поле КАК '%query %'), ORDER BY o ПРЕДЕЛ ASC 5
был бы моим способом сделать его. Я не знаю, как это масштабируется.
я не понимаю
GROUP BY B ORDER BY B ASC LIMIT 5
, это применяется только к последнему ВЫБОРУ в объединении?
mysql на самом деле позволяет, Вы, чтобы сгруппироваться столбцом и все еще не сделать агрегируетесь на других столбцах?
РЕДАКТИРОВАНИЕ: aaahh. Я вижу, что mysql на самом деле делает. Это - специальная версия ОТЛИЧНЫХ (b) или что-то. Я не хотел бы пытаться быть экспертом по той области:)
Если нет вида, который имеет смысл заказывать им, Вы требуете, делаете не объединение, результаты вместе - просто возвращают 3 отдельных recordsets и соглашение с ними соответственно в Вашем уровне данных.
Я в конечном счете (смотрящий на все предложения) пришел к этому решению, это - определенный компромисс между тем, в чем я нуждаюсь и время.
SELECT * FROM
(SELECT A, B, C, "1" FROM table WHERE B LIKE 'query%' LIMIT 3
UNION
SELECT A, B, C, "2" FROM table WHERE B LIKE '%query%' LIMIT 5)
AS RS
GROUP BY B
ORDER BY 1 DESC
это поставляет 5 общих количеств результатов, виды из четвертого "столбца" и дает мне, в чем я нуждаюсь; естественный набор результатов (его прибытие через Ajax) и подстановочный набор результатов после прямо после.
:)
/ член парламента
Существует два варианта ОБЪЕДИНЕНИЯ.
'UNION' and 'UNION ALL'
В большинстве случаев то, что Вы действительно хотите сказать, является ОБЪЕДИНЕНИЕМ ВСЕ, поскольку оно не делает дублирующегося устранения (Думайте SELECT DISTINCT
) между наборами, которые могут привести к довольно мало сбережений с точки зрения времени выполнения.
Другие предложили несколько наборов результатов, который является осуществимым решением однако, я предостерег бы против этого вовремя чувствительные приложения или приложения, соединенные по WANs, поскольку выполнение так может привести к значительно более распространениям в прямом и обратном направлениях на проводе между сервером и клиентом.