. Shadow: Все в порядке, во-первых, это уже решается указанием размеров блоков, а во-вторых, на супер большом экране так и должно быть. Но если не нравится, то после первой тройки можно поставить явный br/, и будет всегда минимум 2 ряда.
Из этого всего важно "1. Бесплатно - можно". А есть ли какая-то ссылка, которая это подтверждает? (Например, там может быть написано так "платно - теперь нельзя".)
"7. Собственно у них так и написано" - где?
По поводу второго, я все запихнул в union, потому что пишу на голом php и не умею делать транзакции =) Если на обычном php написать два запроса подряд, то, особенно если первый долгий, между ними вполне может выпасть чей-то еще select, и found_row() вернет не то значение.
По поводу, `phone`, `city`, `last_name`, они должны браться из заджойненных phones, cities, names. Я сглупил, нужно через точки писать. phones.phone и т. д.
А чтобы узнать количество строчек возвращенных, нужно чуточку изменить запрос: вместо первой строчки пишем select users.id id, users.name name, users.pass pass ... from users
а после последней добавляем union select found_rows() id, "totally" name, "totally" pass ...
Ну, вообще задача состоит в том, чтобы узнать стандартный способ для реализации этого. Ваш вариант чуток получше может быть, по крайней мере на строках, так что спасибо.
А выглядит как костыльный. Но если нет стандатрного механизма, то ладно. Группировать по функции я не боюсь, а боюсь, что через год не пойму, что это я написал такое.