|
|
|
| Вывести тех кто с фото если они есть
Есть таблица с пользователями:
mysql_query("CREATE TABLE `table_users` (
id_user BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
avatar VARCHAR(255) CHARACTER SET UTF8 COLLATE utf8_unicode_ci,
PRIMARY KEY (id_user))TYPE=MyISAM CHARACTER SET UTF8 COLLATE 'utf8_unicode_ci'")
Если avatar не пусто то значит, у пользователя есть фото.
Нужно вывести рандомно 10 пользователей у которых есть фото а если пользователей с фото всего 6 то нужно вывести сначало 6 с фото а потом 4 без фото.
То есть это для того чтобы показывать 10 случайных пользователей. И я хочу, чтобы в самом верху были сначало те кто с фото а потом те кто без фото и причём в случайном порядке. | |
|
|
|
|
|
|
|
для: danya_nyjniy
(13.05.2012 в 15:20)
| | Проще всего воспользоваться двумя запросами, сначала попытаться выбрать 10 пользователей с фото
SELECT
*
FROM
table_users
WHERE
avatar <> ""
ORDER BY RAND()
LIMIT 10
| Если по итогам запроса до 10 не будет хватать - выполнить еще один запрос. К тому времени, когда система разрастется, 10 человек с фото уже будет и запрос всегда будет один (а главное он будет простым и легко модифицируемым). | |
|
|
|
|
|
|
|
для: cheops
(13.05.2012 в 16:17)
| | Дело как раз и в том что я хочу сделать это одним запросом | |
|
|
|
|
|
|
|
для: danya_nyjniy
(13.05.2012 в 16:29)
| | По объему вычислений все-равно получится два... | |
|
|
|
|
|
|
|
для: cheops
(13.05.2012 в 16:41)
| | а есть разница в такой запросе:
mysql_query("SELECT COUNT(*) FROM table1");
mysql_query("SELECT COUNT(*) FROM table2");
|
и
mysql_query("SELECT COUNT(*) FROM table UNION ALL SELECT COUNT(*) FROM table2;");
|
Когда было 2 миллиона записей, скорость обработки запросов в первом варинте ничем не отличалась от второго... Или же все-таки есть разница? | |
|
|
|
|
|
|
|
для: ladan
(13.05.2012 в 23:04)
| | На уровне БД это в обоих случаях 2 запроса.
Разница будет только если PHP и MySQL сервера расположены на разных физических серверах. Т.е. PHP во втором случае сделает только одно обращение к БД и разница будет если эти обращения достаточно медленны.
На вскидку в голову приходит только 1 вариант, когда UNION полезен. Это когда над совместной выборкой производятся какие-то совместные действия. Например:
(SELECT * FROM t1)
UNION
(SELECT * FROM t2)
ORDER BY time DESC
LIMIT 25
|
будет значительно быстрее, чем
SELECT * FROM t1 ORDER BY time DESC LIMIT 25
| +
SELECT * FROM t2 ORDER BY time DESC LIMIT 25
| + обработка и сортировка результата средствами PHP | |
|
|
|
|
|
|
|
для: Sfinks
(14.05.2012 в 05:27)
| | ясно, спасибо за ответ! | |
|
|
|
|
|
|
|
для: cheops
(13.05.2012 в 16:41)
| | Хорошо если 2 то подскажите мне | |
|
|
|
|
|
|
|
для: danya_nyjniy
(13.05.2012 в 15:20)
| |
SELECT id_user, avatar
FROM( SELECT *, IF(avatar!='',1,0) withAvatar
FROM table_users
ORDER BY RAND()
LIMIT 10 )t
ORDER BY withAvatar DESC
|
| |
|
|
|