Необходимо переделать SQL запрос

Статус
В этой теме нельзя размещать новые ответы.

WiseWay

Новичок
Необходимо переделать SQL запрос

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

PHP:
SELECT
  
  event.id
  ,event.urg
  ,event.foto
  ,event.flaer
  ,event.iid
  ,event.alias AS ealias
  ,event.title".$en." AS title
  ,event.brief".$en." AS brief
  ,event.tid
  ,etype.unit".$en." AS et_title
  ,etype.alias AS et_alias

  ,institution.alias AS ialias
  ,institution.title".$en." AS ititle

  ,itype.unit".$en." AS ittitle
  ,itype.alias AS italias
  ,MIN(event_show.dt) as sortdt
  ,REPLACE(event.title,'«','') as event_sort_title, COUNT(event_show.iid) as instcnt

  FROM event_show, institution_itype 
  LEFT JOIN event ON event_show.eid=event.id
  LEFT JOIN institution ON institution.iid=event.iid
  LEFT JOIN etype ON etype.id=event.tid
  LEFT JOIN itype ON itype.id=institution_itype.tid
  WHERE 

((CURDATE() BETWEEN DATE_FORMAT(event_show.dt, '%Y-%m-%d') AND event_show.dte)
      OR
    (CURDATE() >= SUBDATE(event_show.dt, INTERVAL $ShowDateLimit DAY) AND  event_show.dt >= CURDATE())
  ) AND

event.iid=institution_itype.iid
  AND event.pub='1'
  AND event.tid<>'7'
  GROUP BY eid
  ORDER BY on_top DESC, urg,sortdt,event_sort_title,etype.title
  LIMIT $EventsCntLimit
Вылетает известная ошибка:

Unknown column 'event_show.eid' in 'on clause'
Которая возникает, судя по форуму, из-за разницы версий MySQL (переезжаем на MySQL 5) и в связи с этим изменением приоритета операции JOIN.
Знающие люди, помогите плз переписать этот запрос, чтобы он выполнялся в MySQL 5.
 

WiseWay

Новичок
Заменил, получил следующего вида запрос:

PHP:
FROM event_show
  JOIN institution_itype ON 
  LEFT JOIN event ON event_show.eid=event.id
  LEFT JOIN institution ON institution.iid=event.iid
  LEFT JOIN etype ON etype.id=event.tid
  LEFT JOIN itype ON itype.id=institution_itype.tid
Результат:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN event ON event_show.eid=event.id LEFT JOIN institution ON institution.iid' at line 32
Видимо не то.
 

DiMA

php.spb.ru
Команда форума
бред в строке

JOIN institution_itype ON

в ошибке же указано конкретное место нарушенного синтаксиса
 

Gas

может по одной?
DiMA
ты зачастую уж слишком категоричен не по делу.

http://dev.mysql.com/doc/refman/5.0/en/join.html
Previously, the comma operator (,) and JOIN both had the same precedence, so the join expression t1, t2 JOIN t3 was interpreted as ((t1, t2) JOIN t3). Now JOIN has higher precedence, so the expression is interpreted as (t1, (t2 JOIN t3)). This change affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join, and the change in precedence changes interpretation of what those operands are.

Example:
SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

Previously, the SELECT was legal due to the implicit grouping of t1,t2 as (t1,t2). Now the JOIN takes precedence, so the operands for the ON clause are t2 and t3. Because t1.i1 is not a column in either of the operands, the result is an Unknown column 't1.i1' in 'on clause' error.
-~{}~ 20.07.09 13:19:

упс,
DiMA, я извиняюсь, думал это ты о моём посте.
 

DiMA

php.spb.ru
Команда форума
прежде чем нажать "ОТПРАВИТЬ", я прочитал тот же кусок доки

а спорить с ошибкой мыскля "You have an error in your SQL syntax" совершенно бессмысленно .-)
 

WiseWay

Новичок
Товарищи, так как правильно запрос написать, чтобы он исполнялся?
 

DiMA

php.spb.ru
Команда форума
чтобы запрос исполнялся, нужно соблюсти синтаксис запроса, все варианты которого в документации
 

WiseWay

Новичок
Кто-нибудь в состоянии написать вариант данного запроса (работающего в MySQL 5) в эту ветку форума или в личку, если по тем или иным причинам это запрещено делать здесь!? Я для этого и опбликовал запрос, чтобы в него можно было внести корректировку. Кто сможет, буду очень благодарен!
 

Alexandre

PHPПенсионер
Товарищи, так как правильно запрос написать, чтобы он исполнялся?
1) упростить запрос до вывода из одной табл, в SELECT ставим *
2) постепенно приджоиновать по одной тбл
3) см ошибки, исправлять
4) добавлять нужное ограничение и добться положительного результата
5) переходить к пп2
6) как только получится выборка из всех тбл, * заменяем на конкретные поля
7) в последнюю очередь приступаем к агрегации данных ( GROUP BY xxx )
8) ну и напоследок ORDER BY и LIMIT

без структур данных - задачу решать за тебя ни кто не будет
это почти как - гадание на кофейной гуще
 

fixxxer

К.О.
Партнер клуба
достаточно проставить скобочки в нужных местах (либо - что лучше - переписать на джойны).

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

если знание sql либо умение читать докуметацию отсутствует - обратиться в раздел "работа", думаю баксов за 20 сделает кто угодно из местных не-совсем-новичков-но-у-кого-полно-времени ;)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху