2016-07-22 2 views
0

Следующие запросы MySQL ниже возвращаются результаты в различных порядках, несмотря на «ORDER BY» является одинаковым для обоих запросов:MySQL - Запрос возвращающие результаты в неправильном порядке

ТАБЛИЦА СТРУКТУРА

+-----------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+-----------------+-------------+------+-----+---------+----------------+ 
| image_id  | int(10)  | NO | PRI | NULL | auto_increment | 
| property_id  | int(10)  | NO |  | 0  |    | 
| image_title  | text  | NO |  | NULL |    | 
| image_title_id | int(10)  | NO |  | 0  |    | 
| image_index  | smallint(3) | NO |  | 0  |    | 
| image_version | tinyint(1) | NO |  | 2  |    | 
| image_landscape | tinyint(1) | NO |  | 1  |    | 
| image_visible | tinyint(1) | NO |  | 1  |    | 
| image_type  | tinyint(1) | NO |  | 3  |    | 
+-----------------+-------------+------+-----+---------+----------------+ 

ТЕСТ 1

Запрос:

SELECT image_id, room_text 
FROM property_record_images 
INNER JOIN property_data_rooms ON property_record_images.image_title_id = property_data_rooms.room_id 
WHERE property_id = 1029 
ORDER BY image_index 

Результат:

+----------+-----------------+ 
| image_id | room_text  | 
+----------+-----------------+ 
|  2042 | Front elevation | 
|  2043 | Garden to rear | 
|  2044 | Kitchen   | 
|  2045 | Breakfast area | 
|  2046 | Lounge   | 
|  2047 | Master bedroom | 
|  2048 | Studio   | 
+----------+-----------------+ 

ТЕСТ 2

Запрос:

SELECT GROUP_CONCAT(CONCAT(property_record_images.image_id) SEPARATOR '|') 
FROM property_record_images 
INNER JOIN property ON property_record_images.property_id = property.property_id 
WHERE property_record_images.property_id = 1029 
ORDER BY image_index 

Результат:

+---------------------------------------------------------------------+ 
| GROUP_CONCAT(CONCAT(property_record_images.image_id) SEPARATOR '|') | 
+---------------------------------------------------------------------+ 
| 2048|2047|2044|2045|2046|2043|2042         | 
+---------------------------------------------------------------------+ 

Это происходит со случайными записями (другой "PROPERTY_ID") поэтому это не просто, как просто обращение к ORDER BY для второго запроса.

Любая идея, почему это происходит и где я ошибся с запросом?

+0

выборочных выходы необходимы – e4c5

+0

Есть ли у вас какие-то выборочных данных, а также структура таблицы для нас? – FMashiro

+0

Является ли тип 'image_index' INT? – KaeL

ответ

1

см http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

Я думаю, вы должны получить упорядоченную группу CONCAT по:

SELECT GROUP_CONCAT(CONCAT(property_record_images.image_id) ORDER BY image_index SEPARATOR '|') 
FROM property_record_images 
INNER JOIN property ON property_record_images.property_id = property.property_id 
WHERE property_record_images.property_id = 1029 
ORDER BY image_index 
+0

Ha! Я тоже это понял, но ты избил меня! Спасибо. :-) – Reado

Смежные вопросы