|
|
|
| Здравствуйте! Есть запрос, который выводит пользователей на сайте:
$query = "SELECT
SQL_CALC_FOUND_ROWS user_id,
user_country_city_name,
user_search_pref,
user_photo,
user_status, alias
FROM `".PREFIX."_users`
WHERE user_id = '{$guest_id}'
ORDER by rand() DESC
LIMIT 0, 6";
$sql_guests = $db->super_query($query, 1);
|
Этот запрос выводит всех подряд.
Подскажите пожалуйста, как выводит 5 пользователя? | |
|
|
|
|
|
|
|
для: Nur-maga
(24.02.2013 в 23:10)
| | >как выводит 5 пользователя?
Имеется в виду 5 пользователей или пятого пользователя? | |
|
|
|
|
|
|
|
для: cheops
(26.02.2013 в 07:20)
| | 5 пользователей конечно, изменяюсь за ошибки)) | |
|
|
|
|
|
|
|
для: Nur-maga
(24.02.2013 в 23:10)
| | > Этот запрос выводит всех подряд.
Вы уверены, что это точно он? Судя по условию WHERE - должен быть найден определенный пользователь по $guest_id, если конечно user_id уникально определяет юзера. Ну и даже если это не так, тогда все равно запрос должен вернуть не более 6 записей (LIMIT 0, 6).
Еще раз проверьте, выведите значение $query перед выполнением, выполните запрос вручную, уберите лишнее, не забывайте про защиту от sql-инъекций | |
|
|
|
|
|
|
|
для: Igorek
(26.02.2013 в 20:53)
| | >> Этот запрос выводит всех подряд.
>
>Вы уверены, что это точно он?
Да, конечно. Вот весь код, который отвечает за вывод:
<?
if($row['user_guests']){
$guests_arr = array_unique(explode('|',$row['user_guests']));
foreach($guests_arr as $guest_id) {
$query = "SELECT
SQL_CALC_FOUND_ROWS user_id,
user_country_city_name,
user_search_pref,
user_photo,
user_status, alias
FROM `".PREFIX."_users`
WHERE user_id = '{$guest_id}'
ORDER by rand() DESC
LIMIT 0, 6";
$sql_guests = $db->super_query($query, 1);
$tpl->load_template('profile_guest.tpl');
foreach($sql_guests as $row_guests){
//Оригинальный (id) - пользователя.
$tpl->set('{user-id-original}', $row_guests['user_id']);
//Замена (id) - на уникальное имя (aliast).
if($row_guests['alias']){
$tpl->set('{user-id}', $row_guests['alias']);
} else {
$tpl->set('{user-id}', 'id'.$row_guests['user_id']);
}
//Выводим статус пользователя, если нету статус то выводим, место прожывания.
if($row_guests['user_status']){
$tpl->set('{guest_status}', stripslashes(substr($row_guests['user_status'], 0, 50)));
} else {
$country_city_guest = explode('|', $row_guests['user_country_city_name']);
$tpl->set('{guest_status}', $country_city_guest[1]);
}
$guest_info = explode(' ', $row_guests['user_search_pref']);
$tpl->set('{name}', $guest_info[0]);
$tpl->set('{last-name}', $guest_info[1]);
if($row_guests['user_photo'])
$tpl->set('{ava}', $config['home_url'].'uploads/users/'.$row_guests['user_id'].'/50_'.$row_guests['user_photo']);
else
$tpl->set('{ava}', '/images/no_ava_50.png');
$tpl->compile('all_guests_friends');}
}
}
?>
|
Здесь есть лимит 6 но почему то выводятся все подряд.
И вот дамп таблицы users^
CREATE TABLE IF NOT EXISTS `new_users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_email` varchar(200) NOT NULL,
`user_password` char(50) NOT NULL,
`user_name` varchar(25) NOT NULL,
`user_lastname` varchar(25) NOT NULL,
`user_sex` int(11) NOT NULL,
`user_day` int(11) NOT NULL,
`user_month` int(11) NOT NULL,
`user_year` int(11) NOT NULL,
`user_country` varchar(50) NOT NULL,
`user_city` varchar(50) NOT NULL,
`user_reg_date` varchar(60) NOT NULL,
`user_lastdate` varchar(60) NOT NULL,
`user_group` smallint(11) NOT NULL,
`user_hid` char(100) NOT NULL,
`user_country_city_name` varchar(60) NOT NULL,
`user_search_pref` varchar(25) NOT NULL,
`user_birthday` char(11) NOT NULL,
`user_privacy` text NOT NULL,
`user_status` varchar(200) NOT NULL,
`user_audio` int(11) NOT NULL,
`user_last_visit` text NOT NULL,
`user_photo` varchar(90) NOT NULL,
`user_delet` int(11) NOT NULL,
`user_ban` int(11) NOT NULL,
`user_balance` int(11) NOT NULL,
`user_wall_num` mediumint(11) NOT NULL,
`user_notes_num` mediumint(11) NOT NULL,
`user_videos_num` mediumint(11) NOT NULL,
`user_wall_id` int(11) NOT NULL,
`user_pm_num` mediumint(11) NOT NULL,
`user_ban_date` varchar(255) NOT NULL,
`user_friends_demands` int(11) NOT NULL,
`user_support` int(11) NOT NULL,
`user_lastupdate` int(11) NOT NULL,
`user_msg_type` int(11) NOT NULL,
`user_new_mark_photos` int(11) NOT NULL,
`user_friends_num` mediumint(11) NOT NULL,
`user_xfields` text NOT NULL,
`user_xfields_all` text NOT NULL,
`user_subscriptions_num` mediumint(11) NOT NULL,
`user_albums_num` mediumint(11) NOT NULL,
`user_sp` varchar(10) NOT NULL,
`user_gifts` int(11) NOT NULL,
`user_public_num` mediumint(11) NOT NULL,
`xfields` text NOT NULL,
`user_doc_num` mediumint(11) NOT NULL,
`user_fave_num` mediumint(11) NOT NULL,
`user_blacklist` text NOT NULL,
`user_blacklist_num` mediumint(11) NOT NULL,
`user_rate` int(11) NOT NULL,
`all_liked_users` text NOT NULL,
`alias` text NOT NULL,
`user_guests` text NOT NULL,
`user_guests_date` datetime NOT NULL,
`user_img_fon` text NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
|
| |
|
|
|
|
|
|
|
для: Nur-maga
(27.02.2013 в 00:05)
| | Раз уж не об этом речь, то про нормализацию и типы полей я промолчу.
Но....
Судя по "AUTO_INCREMENT=4 ;" у вас сейчас в таблице не более 3ех записей. Как вы хотите из них вывести только первые 5? Это по-любому будут все. | |
|
|
|
|
|
|
|
для: Sfinks
(27.02.2013 в 10:18)
| | >Судя по "AUTO_INCREMENT=4 ;" у вас сейчас в таблице не более 3ех записей. Как вы хотите из них вывести только первые 5? Это по-любому будут все.
Это потому что на локальном сервере нет столько пользователей, на реальном хостинге, где есть много пользователей, этот кусок кода выводит всех подряд.
>Выводит всё судя по всему из-за цикла. А какая задача должна выполняться этим кодом?
Выводит из базы последние 5 пользователей. | |
|
|
|
|
|
|
|
для: Nur-maga
(27.02.2013 в 12:05)
| | >>Выводит всё судя по всему из-за цикла. А какая задача должна выполняться этим кодом?
>Выводит из базы последние 5 пользователей.
Вам как бы намекают на цикл внимание обратить:
<? if($row['user_guests']){
$guests_arr = array_unique(explode('|',$row['user_guests']));
foreach($guests_arr as $guest_id) {
|
ваш запрос, с последующей компиляцией шаблона, выполнится count($guest_arr) раз. Откуда берутся id'шники в $row['user_guests']? Зачем для каждого id'шника выполнять выборку, когда можно и нужно все сразу вытащить? | |
|
|
|
|
|
|
|
для: Nur-maga
(27.02.2013 в 12:05)
| |
SELECT * FROM new_users ORDER BY user_id DESC LIMIT 0, 5
|
* - берём все поля, нужное поле укажите в пхп коде
ORDER BY user_id DESC - упорядочивание в обратном порядке от последнего добавленного пользователя
LIMIT 0, 5 - думаю понятно | |
|
|
|
|
|
|
|
для: Nur-maga
(27.02.2013 в 12:05)
| | Стоп!
Так у вас же "PRIMARY KEY (`user_id`)"!
Как может быть WHERE user_id = '{$guest_id}' и LIMIT?
Пользователей с user_id = '{$guest_id}' всегда будет 0 или 1 и не более!
(кстати кавычки для значения поля типа int не нужны)
Так что вам нужно, я так и не могу понять?
- Пользователь с конкретным user_id? Тогда:
SELECT * FROM new_users WHERE user_id = {$guest_id}
|
- Пять случайных пользователей? Тогда:
SELECT * FROM new_users ORDER BY rand() LIMIT 5
|
- Пять последних пользователей? Тогда:
SELECT * FROM new_users ORDER BY user_id DESC LIMIT 5
|
Что из этого вам подходит и что не работает??? | |
|
|
|
|
|
|
|
для: Sfinks
(27.02.2013 в 15:40)
| | Есть сайт http://kavkaznet.org/ и там есть пункт посетители, т.е. гости. там выводятся пользователи, которые просматривали профиль. Это CMS Vii Engine.
На чистом PHP я бы смог это реализовать, но здесь не получается одному.
Есть такблица:
--
-- Структура таблицы `new_users`
--
CREATE TABLE IF NOT EXISTS `new_users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_email` varchar(200) NOT NULL,
`user_password` char(50) NOT NULL,
`user_name` varchar(25) NOT NULL,
`user_lastname` varchar(25) NOT NULL,
`user_sex` int(11) NOT NULL,
`user_day` int(11) NOT NULL,
`user_month` int(11) NOT NULL,
`user_year` int(11) NOT NULL,
`user_country` varchar(50) NOT NULL,
`user_city` varchar(50) NOT NULL,
`user_reg_date` varchar(60) NOT NULL,
`user_lastdate` varchar(60) NOT NULL,
`user_group` smallint(11) NOT NULL,
`user_hid` char(100) NOT NULL,
`user_country_city_name` varchar(60) NOT NULL,
`user_search_pref` varchar(25) NOT NULL,
`user_birthday` char(11) NOT NULL,
`user_privacy` text NOT NULL,
`user_status` varchar(200) NOT NULL,
`user_audio` int(11) NOT NULL,
`user_last_visit` text NOT NULL,
`user_photo` varchar(90) NOT NULL,
`user_delet` int(11) NOT NULL,
`user_ban` int(11) NOT NULL,
`user_balance` int(11) NOT NULL,
`user_wall_num` mediumint(11) NOT NULL,
`user_notes_num` mediumint(11) NOT NULL,
`user_videos_num` mediumint(11) NOT NULL,
`user_wall_id` int(11) NOT NULL,
`user_pm_num` mediumint(11) NOT NULL,
`user_ban_date` varchar(255) NOT NULL,
`user_friends_demands` int(11) NOT NULL,
`user_support` int(11) NOT NULL,
`user_lastupdate` int(11) NOT NULL,
`user_msg_type` int(11) NOT NULL,
`user_new_mark_photos` int(11) NOT NULL,
`user_friends_num` mediumint(11) NOT NULL,
`user_xfields` text NOT NULL,
`user_xfields_all` text NOT NULL,
`user_subscriptions_num` mediumint(11) NOT NULL,
`user_albums_num` mediumint(11) NOT NULL,
`user_sp` varchar(10) NOT NULL,
`user_gifts` int(11) NOT NULL,
`user_public_num` mediumint(11) NOT NULL,
`xfields` text NOT NULL,
`user_doc_num` mediumint(11) NOT NULL,
`user_fave_num` mediumint(11) NOT NULL,
`user_blacklist` text NOT NULL,
`user_blacklist_num` mediumint(11) NOT NULL,
`user_rate` int(11) NOT NULL,
`all_liked_users` text NOT NULL,
`alias` text NOT NULL,
`user_guests` text NOT NULL,
`user_guests_date` datetime NOT NULL,
`user_img_fon` text NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- Дамп данных таблицы `new_users`
--
INSERT INTO `new_users` (`user_id`, `user_email`,
`user_password`, `user_name`, `user_lastname`, `user_sex`,
`user_day`, `user_month`, `user_year`, `user_country`,
`user_city`, `user_reg_date`, `user_lastdate`,
`user_group`, `user_hid`, `user_country_city_name`,
`user_search_pref`, `user_birthday`, `user_privacy`,
`user_status`, `user_audio`, `user_last_visit`,
`user_photo`, `user_delet`, `user_ban`, `user_balance`,
`user_wall_num`, `user_notes_num`, `user_videos_num`,
`user_wall_id`, `user_pm_num`, `user_ban_date`,
`user_friends_demands`, `user_support`, `user_lastupdate`,
`user_msg_type`, `user_new_mark_photos`,
`user_friends_num`, `user_xfields`, `user_xfields_all`,
`user_subscriptions_num`, `user_albums_num`, `user_sp`,
`user_gifts`, `user_public_num`, `xfields`, `user_doc_num`,
`user_fave_num`, `user_blacklist`, `user_blacklist_num`,
`user_rate`, `all_liked_users`, `alias`, `user_guests`,
`user_guests_date`, `user_img_fon`) VALUES
(1, 'adds@bk.ru', '63ee451939ed580ef3c4b6f0109d1fd0',
'Нурмагомед', 'Цехаев', 1, 27, 5, 1989, '1', '2425',
'1361616449', '1361616449', 1,
'63ee451939ed580ef3c4b6f0109d1fd0499 b95eea599df1950b335b8b4e3ea8b',
'Россия|Гудермес', 'Нурмагомед Цехаев', '1989-5-27',
'val_msg|1||val_wall1|1||val_wall2|1||val_wall3|1||val_info|1||val_guests1|1||val_guests2|1||',
'Просто статус', 2, '1361956427', '47656a9903a4efe.jpg',
0, 0, 9464, 8, 1, 1, 5, 0, '', 0, 0, 1361955928, 1, 0, 1,
'vk|http://vk.com/nurmaga95||od|http://www.odnoklassniki.ru/nurmaga||phone|+79288965718||site|это и есть мой сайт||',
'activity|Программист||interests|Наука||myinfo|ничего....||music|Рок||kino|Ужасы||books|PHP ООП||games|Бильярд||',
0, 1, '7|0', 1, 1, '', 0, 0, '', 0, 650, '', 'nurmaga',
'|2||2||2||2||2||2||2||3||3||2||4||4|',
'0000-00-00 00:00:00', '/uploads/fon/1/147a8527c2b2e8c.jpg'),
;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
Когда пользователи приходят в гости, записывается id гостей примерно так: |2||2||2||2||2||2||2||3||3||2||4||4| не 1, не 5 а выводятся все.
Я бы хотел вывести последние 5 посетителей.
>Пять последних пользователей? Тогда:
Не пользователей, а посетителей, которые просматривали мой профиль. | |
|
|
|
|
|
|
|
для: Nur-maga
(27.02.2013 в 00:05)
| |
<?
foreach($guests_arr as $guest_id) {
?>
|
Выводит всё судя по всему из-за цикла. А какая задача должна выполняться этим кодом? | |
|
|
|
|