Задавайте вопросы, мы ответим
Вы не зашли.
Помогите плиз. Есть запрос к базе
$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 все нормально. Вместе с группировкой сделать к другой базе (они почти одинаковы), то все нормально.
Что не так делаю? А да, на локале на денвере тоже все работает. Не работает только на хостинге и на одной конкретной базе.
Неактивен
Возможно на сервере установлен режим ONLY_FULL_GROUP_BY, а ваш скрипт не обрабатывает ошибки.
попробуйте
$sql = "SELECT `".$name."`, min(`".$sert."`) FROM `parse` GROUP BY `".$name."`";
Неактивен
учтите, что при группировке ваш запрос выбирает случайное значение `a_organ_to_certification_rds_organ_to_certification_reg_number` из группы.
подробнее см http://sqlinfo.ru/articles/info/18.html
Неактивен
vasya написал:
Возможно на сервере установлен режим ONLY_FULL_GROUP_BY, а ваш скрипт не обрабатывает ошибки.
попробуйте
$sql = "SELECT `".$name."`, min(`".$sert."`) FROM `parse` GROUP BY `".$name."`";
не, тоже самое, нуль. На сервере лежит вторая база данных и этот запрос к ней работает.
Неактивен
а может есть какой другой вариант? не через GROUP BY? Мне из таблицы надо выбрать два поля, но уникальность должно быть только в одной колонке, а из второй любое значение. если брать SELECT DISTINCT `"$name"`, то как вторую колонку привязать? в этом-же запросе?
Неактивен
уточните, что значит "отдает 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
Как это победить?
Неактивен
собственно рекомендация указана в сообщении: установить SQL_BIG_SELECTS равный 1 или увеличить значение MAX_JOIN_SIZE
можно пойти другим путем:
-) добавить в запрос условие where (судя по ошибке таблица большая, вам действительно нужен такой большой результат?)
-) добавить индекс на поле a_organ_to_certification_rds_organ_to_certification_name
Неактивен
Какое у Вас значение переменной MAX_JOIN_SIZE? Так по-умолчанию:
Неактивен
rgbeast написал:
Какое у Вас значение переменной MAX_JOIN_SIZE? Так по-умолчанию:
mysql> select @@MAX_JOIN_SIZE;
+----------------------+
| @@MAX_JOIN_SIZE |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)
@@MAX_JOIN_SIZE; 100000
Да, таблица огромная, я поэтому и хочу из нее ключевое поле вытащить.
Неактивен
Спасибо, расширил, заработало.
Неактивен
set MAX_JOIN_SIZE = XXX;
определите где задается 100000, чтоы после перезагрузки проблема не возникла снова
скорее всего этот параметр указан в конфигурационном файле my.cnf
Неактивен
vasya написал:
set MAX_JOIN_SIZE = XXX;
определите где задается 100000, чтоы после перезагрузки проблема не возникла снова
скорее всего этот параметр указан в конфигурационном файле my.cnf
да, в нем и менял.
А вот для развития, так и ни разу не нагуглил ответ. Можно было-бы мою задачу решить через DISTINCT?
то есть отобрать по одной колонке и добавить вторую колонку в этом-же запросе?
Неактивен
нет
select distinct col1, col2 from table;
эквивалентно
select col1, col2 from table group by col1, col2;
Неактивен