Перейти к содержимому

Фото
- - - - -

Помощь с MySQL


  • Вы не можете создать новую тему
  • Please log in to reply
26 ответов в этой теме

#1 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 26 Март 2006 - 23:43

В MySQL не работает вот такой запрос
SELECT * FROM news WHERE date=(SELECT Max(date) FROM news)

Пытаюсь выбрать самую последнюю по дате новость. Запрос, который ищет последнюю дату, отдельно работает, но если попытаться соединить их вместе, то результата никакого.
Пробовал другие варианты, но получал либо опять фигу с маслом, либо ошибку в синтаксе. Буду признателен, если кто поможет!

Сообщение изменено: simonsays (26 Март 2006 - 23:44 )

  • 0

#2 Контрафхтагн

Контрафхтагн

    но вот

  • Постоялец
  • 2 565 сообщений

Отправлено 26 Март 2006 - 23:45

simonsays, а он и не должен в MySQL работать.
  • 0

#3 Сиря

Сиря

    Кот, который курит косяк, а потом у него увеличиваются глаза

  • Пользователь
  • 117 сообщений
  • Откуда:Из: Из: Из: Из:

Отправлено 26 Март 2006 - 23:46

блин, жаль что под рукой всего этого нет. но мне кажется, ошибка тут в том, что всё что заключено в одиночные кавычки воспринимается MySQL-ом как строковое значение. попробуй вместо них скобки.
  • 0
\ё/

#4 Контрафхтагн

Контрафхтагн

    но вот

  • Постоялец
  • 2 565 сообщений

Отправлено 26 Март 2006 - 23:46

SELECT * FROM news order by date DESC limit 1;

сработает лучше
  • 0

#5 Сиря

Сиря

    Кот, который курит косяк, а потом у него увеличиваются глаза

  • Пользователь
  • 117 сообщений
  • Откуда:Из: Из: Из: Из:

Отправлено 26 Март 2006 - 23:48

SELECT * FROM news order by date DESC limit 1;

сработает лучше


блин, как чувствовал, что что-то в этом роде должно быть :) офигеть, каждый день работаю с SQL (правда, постгрес), а сноровку-то теряю :( давно сам селектов не сочинял однако.
  • 0
\ё/

#6 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 26 Март 2006 - 23:49

спасибо за вариант! но мне всё же любопытно, почему не работает такой запрос. со скобками мне выдаётся ошибка в синтаксе
  • 0

#7 Контрафхтагн

Контрафхтагн

    но вот

  • Постоялец
  • 2 565 сообщений

Отправлено 26 Март 2006 - 23:50

Старые MySQL точно не поддерживают вложенные запросы. Может и тот, с которым ты работаешь, тоже?
  • 0

#8 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 26 Март 2006 - 23:54

у меня MySQL 4.0.25... видимо, в этом всё и дело. спасибо!
  • 0

#9 Vladson

Vladson

    XTGamers.com

  • Постоялец
  • 1 921 сообщений
  • Откуда:Эстония, Таллинн

Отправлено 27 Март 2006 - 00:10

Старые MySQL точно не поддерживают вложенные запросы.

Ты где такие нашёл ?

(MySQL поддерживают их начиная с версии 4.0 а выпустили её уже много лет назад)

у меня MySQL 4.0.2

Значит у тебя поддерживает (просто мозгов не хватает чтоб их использовать)


(это не оскорбление а констатация факта)

Сообщение изменено: Vladson (27 Март 2006 - 00:12 )

  • 0
Один Владсон может за...ать всех, кроме себя самого. Два Владсона могли бы за...ать абсолютно кого угодно, но Владсон единственный и неповторимый. ©Vladson

Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih

Не вазелин, а бизнес-гель ©Avagraen

#10 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 Март 2006 - 00:14

ну тогда если такой умный, то подскажи. если не можешь, то самовыражайся в другом месте
  • 0

#11 Vladson

Vladson

    XTGamers.com

  • Постоялец
  • 1 921 сообщений
  • Откуда:Эстония, Таллинн

Отправлено 27 Март 2006 - 00:20

simonsays, если ты не веришь что я такой умный то почитай http://dev.mysql.com.../refman/4.1/en/ и убедись в этом сам :D

Я просто бухой в доску, по этому немного груб, однако это не значит что я не прав... (я всегда прав, и уже даже на этом форуме в этом убедились многие)
  • 0
Один Владсон может за...ать всех, кроме себя самого. Два Владсона могли бы за...ать абсолютно кого угодно, но Владсон единственный и неповторимый. ©Vladson

Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih

Не вазелин, а бизнес-гель ©Avagraen

#12 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 Март 2006 - 00:23

тогда специально для тебя 2 пункта из правил этого раздела форума -

Относитесь с уважением как к участникам раздела, так и к другим людям при написании постов. Грубое поведение будет предупреждаться всеми имеющимися в распоряжении способами.
+ Не стоит также строить всяческие намеки (тем более, указывать явно) на свое превосходство в чем-либо. Это не работает, но сильно раздражает людей. Будьте скромны в определениях своих знаний и умений -- лучше показывайте их на деле.


А подзапросы действительно работают. Попробовал сделать несколько других. Когда я поставил заместо Max(date) просто дату и вставил условие, что date='конкретное число' всё стало ок... Непонятно...

Сообщение изменено: simonsays (27 Март 2006 - 00:29 )

  • 0

#13 Vladson

Vladson

    XTGamers.com

  • Постоялец
  • 1 921 сообщений
  • Откуда:Эстония, Таллинн

Отправлено 27 Март 2006 - 00:29

Для прикола взял запрос (действующий) из рнрВВ

SELECT * FROM phpbb_posts WHERE post_id=(SELECT Max(post_id) FROM phpbb_users)

И всё работает, то что он не работает у тебя значит что ты либо ошибся в названии полей, либо где-то поставил лишьние кавычки, в любом случае виноват в этом не я.

Так в чём ты меня обвиняешь ?

Я просто бухой в доску

По этому пожалуй зарание извенюсь (возможно я слишком груб)

Однако в твоём примере ты не привёл то что возвращает тебе сервер по этому не возможно понять виноват запрос, сервер, или ты сам !!!

Вывод делай сам...
  • 0
Один Владсон может за...ать всех, кроме себя самого. Два Владсона могли бы за...ать абсолютно кого угодно, но Владсон единственный и неповторимый. ©Vladson

Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih

Не вазелин, а бизнес-гель ©Avagraen

#14 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 Март 2006 - 00:41

Едва ли я в чём-то ошибся:

SELECT *
FROM news
WHERE date = (
SELECT Max( date )
FROM news)


#1064 - 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 'SELECT Max(date) AS FROM news)' at line 1

Единственная разница, которую я вижу между моим запросом и тем, что привёл в пример ты - у меня подзапрос делается в той же таблице, в твоём примере - в другой... Но играть роли это не должно.

Сообщение изменено: simonsays (27 Март 2006 - 00:42 )

  • 0

#15 Vladson

Vladson

    XTGamers.com

  • Постоялец
  • 1 921 сообщений
  • Откуда:Эстония, Таллинн

Отправлено 27 Март 2006 - 00:46

А подзапросы действительно работают.

Вот и я о том-же, работают, более того без вопросов !!!


Другое дело что поля с именами "date", "time" итд (т.е которые могут совпадать как с системными переменными MySQL так и переменными всей системы) должны быть в кавычках !!!

Кстати по ссылке http://dev.mysql.com.../refman/4.1/en/ всё это написано !!!

(короче проверь)

SELECT * FROM 'news' WHERE 'date' = (SELECT Max( 'date' ) FROM 'news')


  • 0
Один Владсон может за...ать всех, кроме себя самого. Два Владсона могли бы за...ать абсолютно кого угодно, но Владсон единственный и неповторимый. ©Vladson

Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih

Не вазелин, а бизнес-гель ©Avagraen

#16 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 Март 2006 - 00:53

Та же история:

#1064 - 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 ''news' WHERE 'date' = (SELECT Max( 'date' ) FROM 'news')' at li
  • 0

#17 Сиря

Сиря

    Кот, который курит косяк, а потом у него увеличиваются глаза

  • Пользователь
  • 117 сообщений
  • Откуда:Из: Из: Из: Из:

Отправлено 27 Март 2006 - 00:55

simonsays, переименуй поле date во что-нибудь отличающееся от этой системной переменной.
  • 0
\ё/

#18 Vladson

Vladson

    XTGamers.com

  • Постоялец
  • 1 921 сообщений
  • Откуда:Эстония, Таллинн

Отправлено 27 Март 2006 - 01:47

Сиря, всё ещё проще, с самого начала надо было проектировать базу более умно...

Сейчас могу лишь посоветовать попробовать упростить запрос
SELECT * FROM `news` ORDER BY `date` DESC LIMIT 1;
однако если поле "date" имеет не ту структуру что я думаю то тут надо будет думать над другим способом

Сообщение изменено: Vladson (27 Март 2006 - 02:04 )

  • 0
Один Владсон может за...ать всех, кроме себя самого. Два Владсона могли бы за...ать абсолютно кого угодно, но Владсон единственный и неповторимый. ©Vladson

Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih

Не вазелин, а бизнес-гель ©Avagraen

#19 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 27 Март 2006 - 06:57

ну а так(с MySQL не пробовал):
SELECT * FROM news N
ORDER BY N.Date DESC LIMIT 1;

И * замения на перечисление полей.
  • 0
Да, я такой!

#20 Сиря

Сиря

    Кот, который курит косяк, а потом у него увеличиваются глаза

  • Пользователь
  • 117 сообщений
  • Откуда:Из: Из: Из: Из:

Отправлено 27 Март 2006 - 09:31

ааа. 'news' убери из кавычек, название таблиц в кавычки не ставят :)
  • 0
\ё/

#21 Контрафхтагн

Контрафхтагн

    но вот

  • Постоялец
  • 2 565 сообщений

Отправлено 27 Март 2006 - 09:45

Ты где такие нашёл ?

(MySQL поддерживают их начиная с версии 4.0 а выпустили её уже много лет назад)

Когда я работал с MySQL, 3.23, что ли, была последней. :)
  • 0

#22 NewweN

NewweN
  • Новобранец
  • 1 сообщений

Отправлено 22 Июнь 2006 - 18:49

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

SELECT name_color
FROM color
WHERE id_color =
(SELECT id_color
FROM color_dveri
WHERE id_tovar_dveri = '3')

Я запросил помощи у тех.поддержки сайта на что получил ответ:

Установленная на наших виртуальных серверах MySQL версии 4.0.24 не поддерживает вложенные
запросы.

Вот так вот!
  • 0

#23 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 22 Июнь 2006 - 19:53

обойтись можно и без вложенных вопросов:

SELECT C.name_color
FROM color AS C, color_dveri AS CD
WHERE C.id_color = CD.id_color
AND CD.id_tovar_dveri = '3'

Курите SQL сильнее.

Сообщение изменено: Warvick (22 Июнь 2006 - 20:08 )

  • 0
Да, я такой!

#24 Акей

Акей

    Смотрит свысока

  • Постоялец
  • 2 134 сообщений

Отправлено 22 Июнь 2006 - 21:35

или новым синтаксисом:

SELECT c.name_color FROM color c INNER JOIN color_dveri cd ON c.id_color=cd.id_color WHERE cd.id_tovar_dveri=3

Спасибо Эрки за наше счастливое детство ;)
  • 0

#25 moroz1999

moroz1999

    Дарт Вейдер

  • Пользователь
  • 240 сообщений

Отправлено 23 Июнь 2006 - 02:00

ааа. 'news' убери из кавычек, название таблиц в кавычки не ставят :)

как так не ставят? всю жизнь все названия в кавычках писал в sql запросах!
  • 0
Welcome my son, welcome to the machine.
What did you dream?
It's alright we told you what to dream.

#26 Акей

Акей

    Смотрит свысока

  • Постоялец
  • 2 134 сообщений

Отправлено 24 Июнь 2006 - 21:29

moroz1999, в одинарных кавычках ' всю жизнь строки были, а названия либо ваше без всего, либо в апострофах `
  • 0

#27 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 26 Июнь 2006 - 13:37

блин, это так давно было :) и кто эту тему вытянул из закромов?

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

причины неработы оказались технические.
  • 0