2016-05-12 3 views
0

Я создаю pagination для алфавита A-Z, используя php с mysql. У меня есть одна запись в моих таблицах для алфавита А. Когда я запрашиваю запись, она вернет более одной строки вместо одной строки. Также связанные таблицы содержат только одну строку записи для идентификатора фильма A. В каких-либо таблицах не существует ни одного отношения. Пожалуйста, исправьте ниже запрос, если я сделал какие-либо ошибки в этом. Заранее спасибо.Запрос возвращает несколько строк?

select 
    M.name, 
    M.id, (select year(M.released_date))as year, 
    MS.storyrating, 
    S.screenplayrating, 
    MS.dialoguerating, 
    MS.directionrating, 
    MS.musicrating, 
    MS.bgmrating, 
    MS.cinematographyrating, 
    MS.characterizationrating, 
    MS.shotlocationrating, 
    MS.editingrating, 
    MS.productionrating, 
    MI.director, 
    MI.musicdirector 
from tttbl_movie M, tttbl_movie_info MI, tttbl_movie_score MS 
where M.id=MI.movie_id 
    and M.id=MS.movie_id 
    AND M.name 'A%' OR M.name 'a%' 
ORDER BY M.name ASC LIMIT 0,2; 
+0

Продвигать использование экспликации 'JOIN' sintaxis, Aar на Бертран написал хорошую статью [Плохие привычки пинать: использование JOIN-стиля старого стиля] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx). –

ответ

0

Попробуйте изменить свой заказ, как

ORDER BY M.name ASC LIMIT 1; 

Кроме того, вам не хватает like в вашем предложении OR, который я предполагаю, это опечатка, так как вы говорите, что вы получаете 2 записей.

+0

oops. Я ошибся при вставке запроса в переполнение стека. На самом деле мой запрос имеет ключевое слово. Предположим, если у меня есть более одной записи в алфавите А, то как она вернет всю запись, начинающуюся с алфавита А, если я установил лимит на 1? – Janaki

+0

@Janaki: - Если вы хотите получить все записи, которые начинаются с 'A', вам просто нужно удалить элемент LIMIT 1;' –

+0

@Janaki: - На боковой ноте старайтесь избегать разделенных запятыми JOINS. Они больше не рекомендуются. Вместо этого попробуйте использовать явные JOINS. –

0

Вы не нравится пункт в вашем коде

select 
M.name, 
M.id, 
year(M.released_date as year, 
MS.storyrating, 
S.screenplayrating, 
MS.dialoguerating, 
MS.directionrating, 
MS.musicrating, 
MS.bgmrating, 
MS.cinematographyrating, 
MS.characterizationrating, 
MS.shotlocationrating, 
MS.editingrating, 
MS.productionrating, 
MI.director, 
MI.musicdirector 
from tttbl_movie M, tttbl_movie_info MI, tttbl_movie_score MS 
    where M.id=MI.movie_id 
and M.id=MS.movie_id 
AND M.name like 'A%' OR M.name like 'a%' ORDER BY M.name ASC LIMIT 0,2; 

и если вам это нужно в конечном итоге ограничить 1

LIMIT 1; 
0

Вам необходимо включить LIKE ключевое слово, а также я думаю, вы должны поставить скобку для OR часть

where M.id=MI.movie_id 
    and M.id=MS.movie_id 
    and (M.name LIKE 'A%' OR M.name LIKE 'a%') 
ORDER BY M.name ASC; 
Смежные вопросы