Оптимизировать 2 запроса MySQL к одному - PullRequest
0 голосов
/ 19 июня 2009

Пользователь имеет домашние животные , домашние животные могут иметь изображения Одно изображение может быть установлено в качестве основного изображения (mainpic = 0 или mainpic = 1)

Мне нужно получить все данные о домашних питомцах из таблицы домашних животных, а также мне нужен идентификатор изображения, где mainpic = 1 или первое изображение или ноль, если у него нет изображения в таблице изображений. Мне нужно получить данные о питомце, даже если на нем нет изображения.

В настоящее время я использую 2 запроса, чтобы сделать это: ВЫБРАТЬ * ИЗ ДОМАШНИХ ПИТОМ, ГДЕ pets.userId = '$ userId' ЗАКАЗАТЬ домашними животными.создано ASC LIMIT 5 ... для каждого результата: ВЫБЕРИТЕ ИД ИЗ ИЗОБРАЖЕНИЙ, ГДЕ petId = '$ petId' ПОРЯДОК ВЫБЕРИТЬ ГЛАВНОЕ ОПИСАНИЕ 1

Мне нужно это оптимизировать и в одном запросе.

Спасибо, Гамлет

Ответы [ 4 ]

1 голос
/ 19 июня 2009

использовать внутреннее объединение, чтобы пропустить несопоставленные записи

select * 
from pets inner join pictures 
on pets.id = petId and mainpic=1
where userId=? 
order by pets.created ASC limit 5

если вы хотите только пустое значение в полях, связанных с изображением, но хотите получить информацию о питомце (ваш Q был немного неясен), тогда используйте левое соединение

select * 
from pets left join pictures 
on pets.id = petId and mainpic=1
where userId=? 
order by pets.created ASC limit 5
0 голосов
/ 19 июня 2009
SELECT  (
        SELECT  id
        FROM    pictures pi
        WHERE   pi.petid = pe.petid
        ORDER BY
                mainpic DESC
        LIMIT 1
        )
FROM    pets pe
0 голосов
/ 19 июня 2009
SELECT *
FROM pets p
     LEFT OUTER JOIN (
        SELECT *
        FROM pictures pict
        WHERE pict.mainpic = 1
     ) pict ON pict.petid = p.petid
WHERE p.userid = '$userid'
0 голосов
/ 19 июня 2009

Попробуйте это:

SELECT * FROM pets
INNER JOIN pictures ON pictures.petid = pets.id AND pictures.mainpic = 1
WHERE pets.userid='$userid'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...