Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: LEFT INNER JOIN >= 3
Форумы портала PHP.SU » » Работа с СУБД » LEFT INNER JOIN >= 3

Страниц (1): [1]
 

1. zzzzzz - 25 Ноября, 2013 - 20:17:49 - перейти к сообщению
Здравствуйте.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. $psql1 = "SELECT *
  3.           FROM node
  4.           LEFT OUTER JOIN field_data_title ON node.nid = field_data_title.nid
  5.           LEFT OUTER JOIN field_data_category ON node.nid = field_data_category.nid
  6.           LEFT OUTER JOIN field_data_body  ON node.nid = field_data_body.nid
  7.           LEFT OUTER JOIN field_data_video ON node.nid = field_data_video.nid
  8.           WHERE node.type='1'
  9.           ORDER BY node.nid DESC";


Я сдался Огорчение
Запрос выдает ошибку Fatal error: Call to a member function fetch_assoc() on a non-object
Убираю одно из(любое) условий LEFT OUTER JOIN и выборка срабатывает.

Их что можно всего 3 раза использовать?
2. caballero - 25 Ноября, 2013 - 20:30:00 - перейти к сообщению
если не писать кривой код то можно сколько угодно

в выражении должна быть указана таблица и поле а не что то одно
3. zzzzzz - 25 Ноября, 2013 - 20:33:39 - перейти к сообщению
Все равно не знаю куда смотреть, укажите пожалуйста
4. caballero - 25 Ноября, 2013 - 20:42:07 - перейти к сообщению
по вашему коду ни фига не понятно где имена таблиц а где полей

в джойне должна быть указано таблица и через точку поле
как здесь: node.nid

у вас стоит только field_data_title
5. EuGen - 25 Ноября, 2013 - 20:50:13 - перейти к сообщению
zzzzzz
Проверьте в первую очередь синтаксис запроса - то есть, что он может быть выполнен СУБД. Подозреваю, что нет, и соответствующий обработчик драйвера возвращает что-нибудь наподобие false вместо объекта.
6. zzzzzz - 25 Ноября, 2013 - 20:51:35 - перейти к сообщению
после ON же описываются поля по которым выбираются данные
(Добавление)
Синтаксис верен. ведь убрав любой join выборка срабатывает. Может я много прошу(байт) ?
7. caballero - 25 Ноября, 2013 - 21:01:07 - перейти к сообщению
выполните этот запрос через phpБнadmin или типа того и увидите ошибку
еле выведите echo mysql_error();
8. zzzzzz - 25 Ноября, 2013 - 21:07:01 - перейти к сообщению
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
(Добавление)
мой английский подсказывает что надо менять настройки mysql. У меня нет доступа к ним
9. EuGen - 25 Ноября, 2013 - 22:03:16 - перейти к сообщению
Эта ошибка означает, что MySQL, во время расчёта плана запроса, попыталась соединить больше, чем max_join_size строк (суммарно на все JOIN, итоговое значение оценивается как произведение затронутых строк в каждой таблице).
Если эта настройка не изменена, то это означает, что Ваш запрос пытается затронуть более 4 млрд. строк. Вы можете отменить ограничение через

- однако, так как Ваш запрос затрагивает более 4 млрд. строк, я бы, на месте DBA, спросил: "Вы уверены"?
10. zzzzzz - 26 Ноября, 2013 - 21:04:46 - перейти к сообщению
Ответ найдет, помогли на sql.ru

Пишу для будущего поколения у которых окажется та же проблема.

Мой запрос оказался верный, неверным оказалось проектирование базы

Цитата пользователя miksoft имеющий на форуме 27000 сообщений Ниндзя : "Для начала, создайте индексы у всех таблиц field_data_* по полю nid".

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

 

Powered by ExBB FM 1.0 RC1