[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Неправильно выдает результат запроса
Denhell
В таблице имеются следующие значения:
user posted image
И запрос
SELECT MIN(reg) AS reg, id FROM pages WHERE parent_id='26' AND reg>'3'

Результат выдает такой:
Array
(
[
0] => 4
[reg] => 4
[1] => 2
[id] => 2
)

Вопрос:
1. Почему в этом массиве id=2, а не 31? значение reg он же правильно определил.
2. Менее важный вопрос - откуда берутся дополнительные элементы массива 0 и 1 ? Разве это дублирование не утяжеляет массив?
rooor
1. MIN() выбирает минимальное значение, WHERE на него не распространяется вроде бы
2. вместо mysql_fetch_array юзай mysql_fetch_assoc
Denhell
1. Он же как-то находит, что parent_id = 26 (у меня в таблице много других значений parent_id). если бы он игнорил WHERE, то бы взял значение reg=1. А сейчас он берет reg из одной строки, а id из другой.
2. Спасибо, помогло.
rooor
по первому пункту был не прав.

покажи код, как делаешь
Denhell
Да собственно и выше весь код. Даже если вбить этот запрос в phpmyadmin - тот же результат. Можете проверить. Вот табличка:
CREATE TABLE IF NOT EXISTS `pages` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`reg` int(3) NOT NULL,
`parent_id` int(3) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;

INSERT INTO `pages` (`id`, `reg`, `parent_id`) VALUES
(2, 5, 26),
(
28, 2, 26),
(
29, 3, 26),
(
30, 1, 26),
(
31, 4, 26);

Michael
Такие вещи делаются например таким запросом:

SELECT id, reg
FROM pages
WHERE reg
IN (

SELECT MIN( reg )
FROM pages
WHERE parent_id = '26'
AND reg > '3'
)


_____________
There never was a struggle in the soul of a good man that was not hard
S.Chushkin
Цитата (Denhell @ 26.06.2013 - 09:19)
1. Почему в этом массиве id=2, а не 31? значение reg он же правильно определил.

MIN() и т.п. это агрегирующие функции. Стандарт SQL не гарантирует соответствие других полей группируемому(ым) (см.доку)
Чтобы гарантировать соответсвие используйте подзапросы (см. выше Michael) или группировку, типа:
SELECT reg, id FROM pages WHERE parent_id='26' AND reg>'3' 
group by reg, id
limit 1


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Guest
Вот спасибо большое всем! Так и думал, что надо группировкой через лимит делать. А по тому методу он реально не гарантирует соответствие, потому что при других параметрах запроса он выдает верный результат.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.