2013-12-16 3 views
3

Вот мой исходный запрос, который работаетSQL-запрос не работает с заказом по

Select * FROM story st, sentences s, speaker sp 
WHERE (st.lesson_id = '1' AND 
     st.speaker_id = sp.speaker_id AND 
     st.sentence_id = s.sentence_id) 

Когда я пытаюсь добавить Order By он ломается.

Select * FROM story st, sentences s, speaker sp 
WHERE (st.lesson_id = '1' AND 
     st.speaker_id = sp.speaker_id AND 
     st.sentence_id = s.sentence_id) ORDER BY st.story_in_lesson_id ASC 

Не могу понять, почему он ломается.

EDIT: Здесь ошибка я получаю Фатальная ошибка: Вызов функции члена fetch_object()

EDIT: Мой PHP код

$result = $mysqli->query("Select * FROM story st, sentences s, speaker sp 
         WHERE st.lesson_id = '1' AND 
         st.speaker_id = sp.speaker_id AND 
         st.sentence_id = s.sentence_id 
         ORDER BY st.story_in_lesson_id ASC"); 

while ($value = $result->fetch_object()) { 
    //never goes in here fails at the fetch_object() 
} 

EDIT:

Можно что он не работает, потому что я пытаюсь запросить несколько таблиц? Только одна из таблиц имеет story_in_lesson_id, которая является исторической таблицей. Когда я запускаю запрос только на этой таблице, он находит find.

EDIT:

Более подробная информация, скопировала DB к моей работе Mac и запрос работает !!! Но почему это не работает на моем компьютере? Кстати, я строго проверяю запрос, просто запустив его внутри Sequel Pro.

+0

как сломается, любые ошибки ..? –

+0

Вам не нужны скобки вокруг предложений where –

+0

Неустранимая ошибка: вызов функции-члена fetch_object() – ryuutatsuo

ответ

0

Благодарим за помощь! Я решил проблему !!!

В конце концов, это проблема с правами на запись файлов. Я понял это, выполнив мой запрос в Sequel Pro, который сделал ошибку о каком-либо файле, расположенном в/var/folders/41/some large number/T /. Я пошел в директорию и разрешил писать доступ, попробовал запрос в Sequel Pro, и это сработало. Затем я иду на свой php и пробую его там, и это сработало.

Если кто-нибудь может ответить, почему это произошло? Все ли запросы записываются в файл журнала или что-то в этом роде? Если кто-то может поделиться еще немного внутри.

0

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

SELECT * 
FROM story st 
INNER JOIN sentences s ON st.sentence_id = s.sentence_id 
INNER JOIN speaker sp ON st.speaker_id = sp.speaker_id 
WHERE st.lesson_id = '1' 
ORDER BY st.story_in_lesson_id ASC 
+0

Ничего такого же результата – ryuutatsuo

1

Вы должны проверить st.story_in_lesson_id существует в story table и предотвратить Fatal error: Call to a member function fetch_object() вы должны попробовать его, как,

$query = "Select * FROM story st, sentences s, speaker sp 
       WHERE st.lesson_id = '1' AND 
       st.speaker_id = sp.speaker_id AND 
       st.sentence_id = s.sentence_id 
       ORDER BY st.story_in_lesson_id ASC"; 
       // check story_in_lesson_id exists in story table 

if ($result = $mysqli->query($query)) { 
    while ($value = $result->fetch_object()) { 
     // while code 
    } // while ends 
} // if result ends 
+0

Это просто ловит ошибку для меня, но в моем тестовом сценарии у меня есть story_in_lesson_id, поэтому он должен работать, но это не так. – ryuutatsuo

+0

Возможно, нет строки в истории, которая имеет соответствующую строку в динамике BOTH и предложения – Strawberry

3

Просим удалить, когда условие дорогая .. ... возможно, это работает и, пожалуйста, дайте мне ответ, что вы получаете.

SELECT * 
FROM story st 
     INNER JOIN sentences s 
       ON st.sentence_id = s.sentence_id 
     INNER JOIN speaker sp 
       ON st.speaker_id = sp.speaker_id 
ORDER BY st.story_in_lesson_id ASC 
+0

То же самое, что и раньше – ryuutatsuo

+0

вы удаляете, где условие –

+0

Да, я удалил условие where, и оно не работает, я удаляю ORDER BY, и он работает , Я удаляю ORDER BY и добавляю условие WHERE, и оно работает. Его sooooo странно, стол истории имеет story_in_lesson_id Я могу напечатать его в моем цикле while, когда я не использую оператор ORDER BY – ryuutatsuo

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