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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Использовать псевдоним в WHERE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Sanek_OS9
Отправлено: 18 Марта, 2015 - 01:47:31
Post Id



Гость


Покинул форум
Сообщений всего: 115
Дата рег-ции: Окт. 2012  
Откуда: Украина


Помог: 0 раз(а)




Здравствуйте, для наглядности опишу задачу. Есть таблица:

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE bag (
  2.   id int(11) NOT NULL AUTO_INCREMENT,
  3.   `level` int(11) NOT NULL DEFAULT '1',
  4.   bag_id int(11) NOT NULL,
  5.   number int(11) NOT NULL,
  6.   user_id int(11) NOT NULL,
  7.   PRIMARY KEY (id)
  8. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


мне нужно получить данные где `number` < `level` * 50.
Для этого я пытался сделать псевдоним в запросе, но псевдонимы в WHERE использовать нельзя( как поступить иначе? Однако
Запрос у меня получился таков:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `bag`.*, (`bag`.`level` * 50) AS `max_number` FROM `bag` WHERE `bag`.`user_id` = '$user->id' AND `bag`.`bag_id` = '$type' AND `bag`.`number` < `bag`.`max_number` LIMIT 1


Увы он не рабочий.
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Марта, 2015 - 02:19:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Повторить (`bag`.`level` * 50) в WHERE

И еще поубирать эти апострофы по большей части - нафик они не нужны.
 
 Top
LIME
Отправлено: 18 Марта, 2015 - 05:58:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




достаточно просто убрать уточнение таблицы для алиаса
но непонятно зачем вообще умножать в запросе?
это операция на каждый божий ряд таблицы
я бы хранил уже в умноженном виде
если надо в обоих видах
(Добавление)
хотя конечно зависит от размера таблицы
но структура явно не маленькой таблицы
 
 Top
Sail
Отправлено: 18 Марта, 2015 - 07:51:14
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Или перенести умножение в условие отбора, а не в результат выборки.
(Добавление)
Раз уж нужны "данные где `number` < `level` * 50"
 
 Top
LIME
Отправлено: 18 Марта, 2015 - 07:52:51
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




те же помидоры
только читабельнее
индексы побоку
(Добавление)
сама идеология бд нарушается если можно так громко сказать
 
 Top
Sail
Отправлено: 18 Марта, 2015 - 07:55:23
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)





DeepVarvar пишет:
эти апострофы по большей части - нафик они не нужны

Они для автодополнения названий таблиц и полей в IDE очень пользительны Улыбка
 
 Top
LIME
Отправлено: 18 Марта, 2015 - 07:55:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




хотя там и результирующая таблица наверное маленькая
но всеже
(Добавление)
в чем польза?
не замечал
типа меньше ждать?
(Добавление)
не замечал возможно потому что запросы копирую из клиентской проги
кто наживую запросы пишет в IDE?
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Марта, 2015 - 09:20:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Sail пишет:
апострофы в IDE очень пользительны
Ну прямо лужа запузырилась.

Ладно мне - адепту вима, плевал я на эти ваши ИДЕ, но, какие нафик вообще апострофы в этих ваших ИДЕ когда БД абстрагирована или вообще круд?
 
 Top
Sanek_OS9
Отправлено: 18 Марта, 2015 - 10:28:19
Post Id



Гость


Покинул форум
Сообщений всего: 115
Дата рег-ции: Окт. 2012  
Откуда: Украина


Помог: 0 раз(а)




Всем спасибо, получилось Подмигивание вот не пойму только чем обратные кавычки мешают? Не понял если "и без них работает" то это не значит что их не нужно использовать, от них вреда во первых нет, а во вторых процитирую кусочек статьи из phpfaq.ru
Цитата:
Так же, есть ещё одно правило - необязательное, но его следует придерживаться во избежание появления ошибок:
Имена полей и таблиц следует заключать в обратные одинарные кавычки - "`" (клавиша с этим символом находится на стандартной клавиатуре слева от клавиши "1") Ведь имя поля может совпадать с ключевыми словами mysql, но если мы используем обратную кавычку, то MySQL поймёт всё правильно:
SELECT * FROM `table` WHERE `date` = '2006-04-04'
Следует различать эти кавычки и не путать одни с другими. Следует также помнить, что обратные кавычки слешами не экранируются.
 
 Top
Sail
Отправлено: 18 Марта, 2015 - 10:33:08
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Sanek_OS9, никто и не говорит, что "не нужно".
Говорят, что "по большей части" они не нужны и что есть-таки им применение помимо экранирования зарезервированных имён Улыбка
 
 Top
armancho7777777 Супермодератор
Отправлено: 18 Марта, 2015 - 13:29:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Sanek_OS9 пишет:
но псевдонимы в WHERE использовать нельзя

 
 Top
tuareg
Отправлено: 18 Марта, 2015 - 13:43:34
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. ... HAVING alias = ....
  3.  

Не надо так делать, если нет GROUP BY
 
 Top
armancho7777777 Супермодератор
Отправлено: 18 Марта, 2015 - 14:01:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Я ответил на конкретный вопрос.
 
 Top
Sanek_OS9
Отправлено: 19 Марта, 2015 - 01:17:39
Post Id



Гость


Покинул форум
Сообщений всего: 115
Дата рег-ции: Окт. 2012  
Откуда: Украина


Помог: 0 раз(а)




[quote=tuareg][/quote] почитал немного википедию там пишут следующее:
Цитата:
Если параметр GROUP BY в SELECT не задан, HAVING применяется к «группе» всех строк таблицы, полностью дублируя WHERE (допускается не во всех реализациях стандарта SQL).

И в итоге я запутался Однако

(Отредактировано автором: 19 Марта, 2015 - 01:18:24)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB