Demiel: Danblack: http://pastebin.com/h3DA8fdW
Hoecker: I am not sure how to ask this. I am trying to give an “alias” to a computed value in my SELECT. for example LENGTHfield AS length. so that I can use this length in my WHERE clause later
Besco: Is this sort of thing possible
Reph: My query now looks like this: http://pastie.org/10418473
Borba: Djam90: aliases established in the SELECT clause are not available until the resultset is returned can be used in GROUP BY, ORDER BY and HAVING clauses. Aliases established in the FROM clause are available earlier can be used in the WHERE clause.
Rumery: Djam90, you can repeat the expression in WHERE to get the same effect
Mccoid: Hmm Rumery it is just, when you have many things like SUM and LENGTH and similar, and then you need it in the SELECT and the WHERE, lots of duplicated code
Rumery: Djam90, yes, but to be able to use the alias in where you would need to wrap it all in another query, thats usually even worse for readability. but that is for “normal” expressions – for sum you cannot use WHERE anyway, thats what HAVING is for
Bawden: Each user have friends also from users table
Jorski: Users have column last_seen_at
Barre: If last_seen_at is 1 minute ago, user is online
Rahall: Now I want to get list of user friends, which should begin with friends online, sorted by name
Hautamaki: And after firends online the rest friends, also sorted by name
Saine: I can do this in one query with UNION, but I have problem with sorting results by name, because ORDER BY doesn’t work with UNION
Gardenas: Is it possible to do this in one query?
Clyatt: Toomus: ORDER BY works with UNION, but you don’t need UNION. You need join
Rumery: Toomus, you want to order by “name”, but only after ordering by “online”
Spinks: Rumery: you mean ORDER BY two columns? First last_seen_at DESC, and then name ASC?
Demiel: I’m having a tough time getting my mysql server to start
Demiel: I’ve tried increasing innodb_force_recovery to 4, but it still won’t start
Rumery: Toomus, using simply “last_seen_at” would order everything by that time and only those with the same time by name – but you can order by your expression to “decide” who is online – boolean expressions return 0/1 as false/true so can be ordered by
Prince: Rumery: Yeah, this doesn’t work http://pastie.org/10418650
Rumery: Toomus, yes, because it orders them ALL by the “last click”
Rumery: Toomus, how do you compute the “is online” state? in sql or in app code?
Rumery: For this to work you need to compute that in sql
Rumery: Toomus, and as salle wrote, you probably want to add a join between user and friends
Moranda: Rumery: list of friends is holded in user column friend_ids as serialized array
Rumery: Toomus, ah : can you change that to a separate table?
Biase: Rumery: I can’t : But this solution is pretty fast
Rumery: But it is not a problem for the ordering itself, only a thing which should be generally avoided
Dicello: Rumery: I’m using Ruby on Rails framework
Halfhill: Rumery: So it is easy to write/read serialized array from DB
Rumery: Toomus, RoR has nothing to do with that design unless it is THAT bad
Rumery: Toomus, serialized array is only a different version of this
Rumery: Toomus, imagine facebook with millions of users and average hundred of friends per user – just searching them your way would be painfully slow
Rumery: Serialized array has a few drawbacks – cannot be indexed to search fast, no easy way to do a query “did this person already befriended that one” etc
Rumery: But there are cases when you just cannot change that or not at the moment, it happens. so unless you can, we should return to the ordering problem : just keep these for later