Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывести тех кто с фото если они есть
 
 автор: danya_nyjniy   (13.05.2012 в 15:20)   письмо автору
 
 

Вывести тех кто с фото если они есть

Есть таблица с пользователями:

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 случайных пользователей. И я хочу, чтобы в самом верху были сначало те кто с фото а потом те кто без фото и причём в случайном порядке.

  Ответить  
 
 автор: cheops   (13.05.2012 в 16:17)   письмо автору
 
   для: danya_nyjniy   (13.05.2012 в 15:20)
 

Проще всего воспользоваться двумя запросами, сначала попытаться выбрать 10 пользователей с фото
SELECT
  *
FROM
  table_users
WHERE
  avatar <> ""
ORDER BY RAND()
LIMIT 10
Если по итогам запроса до 10 не будет хватать - выполнить еще один запрос. К тому времени, когда система разрастется, 10 человек с фото уже будет и запрос всегда будет один (а главное он будет простым и легко модифицируемым).

  Ответить  
 
 автор: danya_nyjniy   (13.05.2012 в 16:29)   письмо автору
 
   для: cheops   (13.05.2012 в 16:17)
 

Дело как раз и в том что я хочу сделать это одним запросом

  Ответить  
 
 автор: cheops   (13.05.2012 в 16:41)   письмо автору
 
   для: danya_nyjniy   (13.05.2012 в 16:29)
 

По объему вычислений все-равно получится два...

  Ответить  
 
 автор: ladan   (13.05.2012 в 23:04)   письмо автору
 
   для: 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 миллиона записей, скорость обработки запросов в первом варинте ничем не отличалась от второго... Или же все-таки есть разница?

  Ответить  
 
 автор: Sfinks   (14.05.2012 в 05:27)   письмо автору
 
   для: 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

  Ответить  
 
 автор: ladan   (14.05.2012 в 11:00)   письмо автору
 
   для: Sfinks   (14.05.2012 в 05:27)
 

ясно, спасибо за ответ!

  Ответить  
 
 автор: danya_nyjniy   (21.05.2012 в 11:12)   письмо автору
 
   для: cheops   (13.05.2012 в 16:41)
 

Хорошо если 2 то подскажите мне

  Ответить  
 
 автор: Sfinks   (21.05.2012 в 12:49)   письмо автору
 
   для: 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования