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 :: Версия для печати :: Использовать псевдоним в WHERE
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Использовать псевдоним в WHERE

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

1. Sanek_OS9 - 18 Марта, 2015 - 01:47:31 - перейти к сообщению
Здравствуйте, для наглядности опишу задачу. Есть таблица:

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


Увы он не рабочий.
2. DeepVarvar - 18 Марта, 2015 - 02:19:51 - перейти к сообщению
Повторить (`bag`.`level` * 50) в WHERE

И еще поубирать эти апострофы по большей части - нафик они не нужны.
3. LIME - 18 Марта, 2015 - 05:58:33 - перейти к сообщению
достаточно просто убрать уточнение таблицы для алиаса
но непонятно зачем вообще умножать в запросе?
это операция на каждый божий ряд таблицы
я бы хранил уже в умноженном виде
если надо в обоих видах
(Добавление)
хотя конечно зависит от размера таблицы
но структура явно не маленькой таблицы
4. Sail - 18 Марта, 2015 - 07:51:14 - перейти к сообщению
Или перенести умножение в условие отбора, а не в результат выборки.
(Добавление)
Раз уж нужны "данные где `number` < `level` * 50"
5. LIME - 18 Марта, 2015 - 07:52:51 - перейти к сообщению
те же помидоры
только читабельнее
индексы побоку
(Добавление)
сама идеология бд нарушается если можно так громко сказать
6. Sail - 18 Марта, 2015 - 07:55:23 - перейти к сообщению

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

Они для автодополнения названий таблиц и полей в IDE очень пользительны Улыбка
7. LIME - 18 Марта, 2015 - 07:55:40 - перейти к сообщению
хотя там и результирующая таблица наверное маленькая
но всеже
(Добавление)
в чем польза?
не замечал
типа меньше ждать?
(Добавление)
не замечал возможно потому что запросы копирую из клиентской проги
кто наживую запросы пишет в IDE?
8. DeepVarvar - 18 Марта, 2015 - 09:20:43 - перейти к сообщению
Sail пишет:
апострофы в IDE очень пользительны
Ну прямо лужа запузырилась.

Ладно мне - адепту вима, плевал я на эти ваши ИДЕ, но, какие нафик вообще апострофы в этих ваших ИДЕ когда БД абстрагирована или вообще круд?
9. Sanek_OS9 - 18 Марта, 2015 - 10:28:19 - перейти к сообщению
Всем спасибо, получилось Подмигивание вот не пойму только чем обратные кавычки мешают? Не понял если "и без них работает" то это не значит что их не нужно использовать, от них вреда во первых нет, а во вторых процитирую кусочек статьи из phpfaq.ru
Цитата:
Так же, есть ещё одно правило - необязательное, но его следует придерживаться во избежание появления ошибок:
Имена полей и таблиц следует заключать в обратные одинарные кавычки - "`" (клавиша с этим символом находится на стандартной клавиатуре слева от клавиши "1") Ведь имя поля может совпадать с ключевыми словами mysql, но если мы используем обратную кавычку, то MySQL поймёт всё правильно:
SELECT * FROM `table` WHERE `date` = '2006-04-04'
Следует различать эти кавычки и не путать одни с другими. Следует также помнить, что обратные кавычки слешами не экранируются.
10. Sail - 18 Марта, 2015 - 10:33:08 - перейти к сообщению
Sanek_OS9, никто и не говорит, что "не нужно".
Говорят, что "по большей части" они не нужны и что есть-таки им применение помимо экранирования зарезервированных имён Улыбка
11. armancho7777777 - 18 Марта, 2015 - 13:29:58 - перейти к сообщению
Sanek_OS9 пишет:
но псевдонимы в WHERE использовать нельзя

12. tuareg - 18 Марта, 2015 - 13:43:34 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. ... HAVING alias = ....
  3.  

Не надо так делать, если нет GROUP BY
13. armancho7777777 - 18 Марта, 2015 - 14:01:52 - перейти к сообщению
Я ответил на конкретный вопрос.
14. Sanek_OS9 - 19 Марта, 2015 - 01:17:39 - перейти к сообщению
[quote=tuareg][/quote] почитал немного википедию там пишут следующее:
Цитата:
Если параметр GROUP BY в SELECT не задан, HAVING применяется к «группе» всех строк таблицы, полностью дублируя WHERE (допускается не во всех реализациях стандарта SQL).

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

 

Powered by ExBB FM 1.0 RC1