SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.09.2016 14:19:38

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Запрос к базе данных отдает NULL

Помогите плиз. Есть запрос к базе


$sql = "SELECT `".$name."`, `".$sert."` FROM `parse` GROUP BY `".$name."`";

Если вывести после подставки данных, то будет так
"SELECT `a_organ_to_certification_rds_organ_to_certification_name`, `a_organ_to_certification_rds_organ_to_certification_reg_number` FROM `parse` GROUP BY `a_organ_to_certification_rds_organ_to_certification_name`".

Проблема в том, что отдает NULL. Убрать группировку, все нормально. Вместе с группировкой сделать запрос в PHPMYADMIN все нормально. Вместе с группировкой сделать к другой базе (они почти одинаковы), то все нормально.

Что не так делаю? А да, на локале на денвере тоже все работает. Не работает только на хостинге и на одной конкретной базе.

Неактивен

 

#2 26.09.2016 14:26:43

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Запрос к базе данных отдает NULL

Возможно на сервере установлен режим ONLY_FULL_GROUP_BY, а ваш скрипт не обрабатывает ошибки.
попробуйте
$sql = "SELECT `".$name."`, min(`".$sert."`) FROM `parse` GROUP BY `".$name."`";

Неактивен

 

#3 26.09.2016 14:28:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Запрос к базе данных отдает NULL

учтите, что при группировке ваш запрос выбирает случайное значение `a_organ_to_certification_rds_organ_to_certification_reg_number` из группы.
подробнее см http://sqlinfo.ru/articles/info/18.html

Неактивен

 

#4 26.09.2016 15:12:02

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Re: Запрос к базе данных отдает NULL

vasya написал:

Возможно на сервере установлен режим ONLY_FULL_GROUP_BY, а ваш скрипт не обрабатывает ошибки.
попробуйте
$sql = "SELECT `".$name."`, min(`".$sert."`) FROM `parse` GROUP BY `".$name."`";

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

Неактивен

 

#5 26.09.2016 15:16:17

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Re: Запрос к базе данных отдает NULL

а может есть какой другой вариант? не через GROUP BY?    Мне из таблицы надо выбрать два поля, но уникальность должно быть только в одной колонке, а из второй любое значение.  если брать SELECT DISTINCT `"$name"`, то как вторую колонку привязать? в этом-же запросе?

Неактивен

 

#6 26.09.2016 16:14:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Запрос к базе данных отдает NULL

уточните, что значит "отдает NULL"

Неактивен

 

#7 26.09.2016 17:02:55

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Re: Запрос к базе данных отдает NULL

var_dump($result) = NULL.

Вообщем, частично разобрался. The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay
EXPLAIN 1     SIMPLE     parse     ALL     NULL    NULL    NULL    NULL    58577     Using temporary; Using filesor

Как это победить?

Неактивен

 

#8 26.09.2016 17:12:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Запрос к базе данных отдает NULL

собственно рекомендация указана в сообщении: установить SQL_BIG_SELECTS равный 1 или увеличить значение MAX_JOIN_SIZE

можно пойти другим путем:
-) добавить в запрос условие where (судя по ошибке таблица большая, вам действительно нужен такой большой результат?)
-) добавить индекс на поле a_organ_to_certification_rds_organ_to_certification_name

Неактивен

 

#9 26.09.2016 17:15:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Запрос к базе данных отдает NULL

Какое у Вас значение переменной MAX_JOIN_SIZE? Так по-умолчанию:

mysql> select @@MAX_JOIN_SIZE;
+----------------------+
| @@MAX_JOIN_SIZE      |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)

 

Неактивен

 

#10 26.09.2016 17:22:47

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Re: Запрос к базе данных отдает NULL

rgbeast написал:

Какое у Вас значение переменной MAX_JOIN_SIZE? Так по-умолчанию:

mysql> select @@MAX_JOIN_SIZE;
+----------------------+
| @@MAX_JOIN_SIZE      |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)

 

@@MAX_JOIN_SIZE;   100000

Да, таблица огромная, я поэтому и хочу из нее ключевое поле вытащить.

Неактивен

 

#11 26.09.2016 17:36:32

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Re: Запрос к базе данных отдает NULL

Спасибо, расширил, заработало.

Неактивен

 

#12 26.09.2016 17:37:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Запрос к базе данных отдает NULL

set MAX_JOIN_SIZE = XXX;
определите где задается 100000, чтоы после перезагрузки проблема не возникла снова
скорее всего этот параметр указан в конфигурационном файле my.cnf

Неактивен

 

#13 26.09.2016 17:53:17

kaiseri
Завсегдатай
Зарегистрирован: 26.09.2016
Сообщений: 26

Re: Запрос к базе данных отдает NULL

vasya написал:

set MAX_JOIN_SIZE = XXX;
определите где задается 100000, чтоы после перезагрузки проблема не возникла снова
скорее всего этот параметр указан в конфигурационном файле my.cnf

да, в нем и менял.

А вот для развития, так и ни разу не нагуглил ответ. Можно было-бы мою задачу решить через DISTINCT? 
то есть отобрать по одной колонке и добавить вторую колонку в этом-же запросе?

Неактивен

 

#14 26.09.2016 17:56:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Запрос к базе данных отдает NULL

нет
select distinct col1, col2 from table;
эквивалентно
select col1, col2 from table group by col1, col2;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson