Има ли как?

4 отговора 226 прегледа
#1

Има ли как?

исма ми се да напиша нещо такова на MySQL:

SELECT @t:= concat(firstname," ", lastname)
FROM table1
WHERE @t LIKE "%ен Ива%" OR @t LIKE "%сто Петр%"

или
SELECT concat(firstname," ", lastname) AS t
FROM table1
WHERE t LIKE "%ен Ива%" OR t LIKE "%сто Петр%"

обаче и двете не работят
някаква идея какво мога да направя?
Предварително благодаря!

Отговор
в отговор на Lizard #2

Re: Има ли как?

Елементарно :)

select concat(firstname, " ", lastname) from table1 where concat(firstname, " ", lastname) like "%ен Ива%" or concat(firstname, " ", lastname) like ...

Вътрешните промеливи са малко странно нещо и по средата на select трудно се използват

2-рия вариант можеш да го постигнеш със GROUP BY ... HAVING

Губи ти се логиката на реда в който се изпълнява SELECT. А той е:
1. Първо се обработват JOIN условията независимо дали са описани във WHERE или с JOIN
2. После се обработва WHERE.
т.е. във WHERE може да се появи само име, което реално съществува в таблиците или произволна комбинация от функции и реални имена.
3. След това се обработва SELECT
т.е. извличат се реалните стойности и се генерират тези които са указани и евентулано се присвояват на alias-и
4. След това се обработва GROUP BY и съответно се пресмятат "групираните" колони в SELECT частта
5. Чак тогава се обработва HAVING
Именно затова в HAVING може да се появява всеки alias
6. Накрая идва ORDER BY т.е. и тук можеш да използваш генериран alias
7. Съвсем накрая идва LIMIT x,y


Помисли обаче дали това което питаш въобще е разумно.
Подобен SELECT ще работи отвратително бавно.
Какво точно се опитваш да извадиш от таблицата?

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на salle #3

Re: Има ли как?

В заявката ми има много CONCAT(...) LIKE "..." , та ми се искаше да не го присвоя на някаква променлива за да не конкатенира много пъти едно и също за всеки LIKE

Отговор
в отговор на Lizard #4

Re: Има ли как?

Ти едва ли не искаш да обработваш заявки като google.
Това обаче се постига със съхранени процедури и доста повечко код.
Доколкото съм забелязал ,обаче ,разчиташ на mySQL , а те съхранени процедури няма да пуснат скоро...

Отговор
в отговор на Lizard #5

Re: Има ли как?

единсвеното възможно е да си направиш view върху first+' '+lats name
и да работиш върху него със стандартният select на mysql

Отговор