[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Флаги стран пользователей
Melvin
Всем привет. Появилась необходимость выводить рядом с логином пользователей флажки стран.

Код страны храниться в определенном поле таблицы `users`.(например для России храним 'RU')
Что бы узнать страну пользователя (и соответственно название требуемого файла картинки флага) необходимо отправить запрос к базе данных. Вроде бы все ничего, но если на странице отображается очень много логинов, причем получаемых также динамически, то получается очень много запросов к базе. Как бы так сделать, что бы при любом упоминании логина любого пользователя, ему подставлялась картинка с флагом ?



Спустя 7 минут, 15 секунд (19.10.2011 - 14:28) Игорь_Vasinsky написал(а):
ну помоему ресурсоемким получиться вариант новой таблицы

`flags`

name | flag

или даже при регистрации для юзера имя файла флага заносить

чем писать алгоритм перебора и выбора флага на if или case, вообще смотря скока стран, если 10-20 - то можно обойтись и условиями

Спустя 5 минут (19.10.2011 - 14:33) Melvin написал(а):
Игорь_Vasinsky
Понимаешь в чем дело, я переживаю за производительность.

Вот, допустим, вывожу на сайте новости. Делаю запрос к таблице `news` получаю все необходимую инфу (включая логин создателя новости, скажем User1). Затем, при выводе новости на страницу, обращаюсь уже к таблице `users` с тем, что бы узнать страну пользователя User1. Узнав страну, вывожу перед логином соответствующую картинку с флагом. Это при каждом выводе новости, мне приходится обращаться по разу к таблице users. Это на мой взгляд тормозно, если новостей на странице будет много.
Как быть?

Спустя 2 минуты, 53 секунды (19.10.2011 - 14:36) Игорь_Vasinsky написал(а):
Видешь - запрос в users всё равно идёт, ну можешь даже так:

у тя же в users не вся инфа хранится? есть же ещё привязка - вот там можешь хранить...

вообщем элегантно было бы отделная табла для стран и флагов, но я думаю ни чё страшного не будет и в той табле столбец добавить, где ты запросы к юзерам делаешь - логины там или ещё что.


у тя структура БД какая?

Спустя 3 минуты, 9 секунд (19.10.2011 - 14:39) Melvin написал(а):
Структура простая:
Две таблицы: users (id,login,password,country)
news (id, caption,body,login)

То есть это нормально будет что я для вывода 15 новостей на сайт 15 раз к таблице users обращусь?

Спустя 3 минуты, 42 секунды (19.10.2011 - 14:42) Игорь_Vasinsky написал(а):
А так бы самый сок:

`users`
id | login | pass | id_country


`country`
id | name | flag


`news`
id | caption | body | id_user

И JOINами запросы делать

Видишь как всё завязано?

Твой пример : 15 новостей = по 15 запросов в 2 таблицы
Мой 15 новостей = 15 запросов в 3 таблицы

Спустя 59 секунд (19.10.2011 - 14:43) Melvin написал(а):
Аааа все понял. Спасибо большущее.

Спустя 2 минуты, 11 секунд (19.10.2011 - 14:46) Игорь_Vasinsky написал(а):
НУ вот..

можешь

memory_usage() использовать - чтоб смотреть скока оперативы тратишь

Спустя 10 минут, 26 секунд (19.10.2011 - 14:56) Guest написал(а):
А зачем вообще для 15 новостей делать 15 запросов?
Делаем один общий запрос во все таблицы для 15 новостей и в цикле выводим на страницу.

Спустя 1 час, 45 минут (19.10.2011 - 16:41) Melvin написал(а):
Застрял теперь вот на этом:

Теперь делаю только 1 запрос к базе:


$news = mysql_query("SELECT * FROM `users`,`news`,`country` WHERE users.id = news.id_users AND country.id = users.id_country");


Выдает верные результаты, но не понимаю как вывести на страницу значение полей, которые одинаковые в нескольких таблицах.
То есть если делаю так:

$row = mysql_fetch_array($news,MYSQL_ASSOC);


то в $row['id'] - что будет, если поле id есть у всех трех таблиц?

Спустя 2 минуты, 1 секунда (19.10.2011 - 16:43) imbalance_hero написал(а):
В БД хранишь в таблице юзеров идентификатор страны: "ru", далее:
<img src="/images/flag_{$flag}.jpg" />

Ничего ведь нет сложного, и лишней таблицы не надо :)

Спустя 3 минуты, 52 секунды (19.10.2011 - 16:47) Melvin написал(а):
imbalance_hero
Проблема не в том. Если я делаю запрос к таблице news, и получаю автора новости. Мне для каждой новости приходится выяснять какой у него этот идентификатор. А это лишний запрос.

НО я уже все решил, сделав запрос сразу к нескольким таблицам и с условиями.


Спустя 4 минуты, 1 секунда (19.10.2011 - 16:51) Melvin написал(а):
В общем не понимаю, как вывести что-то, если запрос сформирован сразу к нескольким таблицам с условием выборки.

mysql_fetch_row($result) - вообще выдает в своих индексах все поля ВСЕХ таблиц. Хз как усзнать нужный индекс.. )) короче хелп

Спустя 1 минута, 7 секунд (19.10.2011 - 16:52) Winston написал(а):
print_r(mysql_fetch_assoc($result));

Спустя 3 минуты, 24 секунды (19.10.2011 - 16:55) imbalance_hero написал(а):
Melvin
А может запрос покажешь?

Спустя 2 минуты, 16 секунд (19.10.2011 - 16:58) Melvin написал(а):
$news = mysql_query("SELECT * FROM `users`,`news`,`country` WHERE users.id = news.id_users AND country.id = users.id_country");


Теперь понял, что он в итоге неверно выдает id. В результате он возвращает id не новости а пользователя...

Спустя 1 минута, 46 секунд (19.10.2011 - 17:00) imbalance_hero написал(а):
Ну так надо указывать поля, которые тебе нужны при выборке, а не просто *.
В таком виде:
`users`.`country`,`news`.`id`,`country`.`id` AS `country_id` ...

И вообще, если ты используешь одну таблицу, и к ней присоединяешь другие, то тут left join тебе надо.

Спустя 2 минуты, 3 секунды (19.10.2011 - 17:02) Melvin написал(а):
imbalance_hero
А можешь показать пример, как надо составить запрос с left join вот на основании этих 3 таблиц?

Спустя 2 минуты, 10 секунд (19.10.2011 - 17:04) imbalance_hero написал(а):
Мы список юзеров выбираем, или новости? Что является главной таблицей?

Спустя 4 минуты, 29 секунд (19.10.2011 - 17:08) Melvin написал(а):
В общем есть такие таблицы:

users: id,login,id_country;
news: id,caption,body,id_users;'
country: id,name,image;

Нужно составить запрос с целью получить информацию из таблицы news. Но для каждой новости нужно вывести возле её автора картинку из таблицы country.
То есть в news.id_user - храним id автора новости. В users.id_country - храним для него id картинки.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.