Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужна помощь в Mysql запросе 
V
    Опции темы
neoks
Дата 9.8.2011, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Вообщем делал скрипт, делал делал вроде все сделал, но тут заказчик решил немного подправить.
Казалось мелочь жизни, но тут я понял что это не так просто как кажется  smile .

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

Сначала я выделяю из одной таблицы записи со значением id_link=1, и циклом WHILE начинаю парсить, в цикле я выделяю ужу другую таблицу у которой та самая дата которою нужно сортировать.

Вот отрывок кода по старому методу без сортировки.
Код

    $result = $db->select('curer','*',array('WHERE'=>"id_link='$id'",'LIMIT'=>$start_page.','.$news_number)); //Выделяю записи с нужным ID
    $count_curer    = $db->super_select('curer','COUNT(*) as count',array('WHERE'=>"id_link='$id'")); //Подсчитаю количество записей
    
     
    while($rows = $db->get_row($result)){
        
        $row = $db->super_select('pages','*',array('WHERE'=>"id='".$rows['id_pages']."'")); //Вытаскиваю записи у которой есть дата


В голову приходит только один вариант, пихать все в массивы и каким то образом сортировать.
Не знаю что делать, может есть более разумный способ отсортировать строки по дате, подскажите плиз что делать. smile 
PM MAIL   Вверх
CruorVult
Дата 9.8.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Вам нужно отсортировать данные первой таблицы ('curer') по самой старшей/младшей дате из связанной таблицы('pages')? я так понял?
или может отношения 'curer':'pages' 1:1 ?
PM MAIL Skype   Вверх
neoks
Дата 9.8.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Мне нужна отсортировать pages, ну как видно я не могу отсортировать в цикле, так как выделяется одна строка в pages с уникальным id.

Я выделяю сначала curer затем в цикле выделяю pages и вывожу данные от pages.

Все было отлично пока заказчик не сказал что нужно отсортировать pages по дате, пришлось ему объяснять что это не так просто но он все равно хочет отсортировать  smile 
PM MAIL   Вверх
neoks
Дата 9.8.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



О и еше одно, не пойму как запустить php файл как делает AJAX только средствами php.
Я имею введу вместо include, пытаюсь сделать file_get_contents но возвращает целый код.
PM MAIL   Вверх
CruorVult
Дата 9.8.2011, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



ничего не понятно!

в каком виде должно всё выглядеть?

Цитата(neoks @  9.8.2011,  13:26 Найти цитируемый пост)
Мне нужна отсортировать pages


каким образом? По каждой записи из 'curer'? или все скопом? тогда что мешает выбрать всё из 'pages'  отсортировав ?

Цитата(CruorVult @  9.8.2011,  12:50 Найти цитируемый пост)
отношения 'curer':'pages' 1:1 ?


Покажите какая связь между таблицами и какай должен быть вывод!

Это сообщение отредактировал(а) CruorVult - 9.8.2011, 15:04
PM MAIL Skype   Вверх
neoks
Дата 9.8.2011, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Оххх, как тяжело объяснять   smile .
Нужна pages отсортировать по дате, но это просто ORDER BY date если делать выборку pages.

Цитата(CruorVult @  9.8.2011,  15:04 Найти цитируемый пост)
тогда что мешает выбрать всё из 'pages'


Эх, как бы сказать, на сайте есть пользователи у которых свои данные, таблица pages общая для всех.
Так вот, через таблица curer  проходят все данные, в ней хранятся идентификаторы других таблиц.

Поэтому если мне нужна получить количество страниц (pages) от этого пользователя то все проходит через таблицу curer.

А проходит это так.

1. ID пользователя задается в переменную $id.
2. Делается выборка из таблицы curer где id пользователя равен переменной $id и с лимитом 500.
Код

$result = $db->select('curer','*',array('WHERE'=>"id_link='$id'",'LIMIT'=>$start_page.','.$news_number));

3. Начинаем циклом WHILE таблицы cucrer
Код

while($rows = $db->get_row($result))

4. Так как в таблице сurer хранятся только идентификаторы других таблиц и только, то мы выделям таблицу pages с подходящим идентификатором из таблицы curer и выводим на экран все что в этой строке.
 
Код

$row = $db->super_select('pages','*',array('WHERE'=>"id='".$rows['id_pages']."'"));


5. На экране появляется все о этой страницы и также дата.

Даже не знаю может кто поймет, так вот теперь перед мной стоит задача отсортировать таблицу pages по дате.

PM MAIL   Вверх
neoks
Дата 9.8.2011, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Как выполнить файл php.
Я хочу подгрузить файл на сервере в страницу но при этом готовый результат php.

Например если сделать так
Код

$test = file_get_contents('file.php'); 

$test //Содержит '<? echo"text" ?>'


А если вставить адрес сервера.
Код

$test = file_get_contents('http://url.ru/file.php'); 

$test //Содержит 'text'


Весь нет перерыл не могу найти, не хочу подставлять адрес сервера к то муже не увсех серверах есть возможность использовать адрес.

PM MAIL   Вверх
нуп
Дата 9.8.2011, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Подключить файл и вызвать нужную функцию  smile 

Это сообщение отредактировал(а) нуп - 9.8.2011, 18:12
PM MAIL   Вверх
neoks
Дата 9.8.2011, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата(нуп @  9.8.2011,  18:12 Найти цитируемый пост)
одключить файл и вызвать нужную функцию

Cуть в том что файл также вызывается через AJAX, не хочу отдельно делать и для AJAX и для PHP.
Вот и стало интересно а можно вообще это сделать через пхп, чтоб сразу приходил результат в виде строки.

PM MAIL   Вверх
GreatAntique
Дата 9.8.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LAMP Developer



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.12.2009
Где: Kyiv, Ukraine

Репутация: 1
Всего: 1



1) по поводу вызова файла:
Код

echo eval(file_get_contents('file.php'));


2) 
Код

/* составляем запрос */
$q="SELECT p.*
FROM curer c
LEFT JOIN pages p ON c.id_pages=p.id
WHERE id_link={$id}
ORDER BY p.date DESC
LIMIT {$start_page},{$news_number}"; 

$res = $db->query($q); /* достаем pages */

while($row = $db->get_row($res))
{
/* делаете что-то с $row */
/* $row - это ваша page */
}


Проверьте есть ли у вас метод $db->query.

Для кол-ва записей немного изменим запрос
Код

$q="SELECT COUNT(p.*) as count
FROM curer c
LEFT JOIN pages p ON c.id_pages=p.id
WHERE id_link={$id}"; 

PM MAIL WWW ICQ Skype   Вверх
neoks
Дата 9.8.2011, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



GreatAntique Ох, наконец, спасибо огромное за помощь  smile  все работает.

А по поводу eval не то.

Вот функция которая возвращает уже готовый результат.

Код

function widget($widget,$mytheme = false){
    
    if(file_exists(ROOT_DIR.'/moduls/user_widgets/'.replase($widget).'/saite_mod.php')){
        /*
        ob_start();
        include(ROOT_DIR.'/moduls/user_widgets/'.replase($widget).'/saite_mod.php');
        $output = ob_get_contents();
        ob_end_clean();
        */
        return @file_get_contents('http://'.$_SERVER["HTTP_HOST"].'/moduls/user_widgets/'.replase($widget).'/saite_mod.php'.($mytheme ? '?mytheme='.replase($mytheme) : ''));
    }
}


Сам файл saite_mod.php содержит такое.

Код

define ( 'ROOT_DIR', '../../..' );
define ( 'SYSTEM_DIR', ROOT_DIR.'/system' );

header ('Content-type: text/html; charset=windows-1251');

require_once (SYSTEM_DIR . '/my_config.php');
require_once (SYSTEM_DIR . '/mysql/is_mysql.php');
require_once (SYSTEM_DIR . '/function.php');
require_once (SYSTEM_DIR . '/templates.php');

.......


Через eval не подходит по двум причинам, во первых результат выводится сразу на экран а не туда куда я захочу, во вторых я использую шаблон и переменных или класов в шаблоне нет  smile 

Пока только вариант использовать адрес домена для обращения за результатом.

PM MAIL   Вверх
GreatAntique
Дата 9.8.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LAMP Developer



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.12.2009
Где: Kyiv, Ukraine

Репутация: 1
Всего: 1



Код

ob_start();
echo eval(file_get_contents('file.php'));
$content = ob_get_contents();  
ob_end_clean(); 

echo $content; // в этой переменной содержится весь вывод из файла


Цитата
во вторых я использую шаблон и переменных или класов в шаблоне нет

Что значит "нет"? Выдается ошибка?
Возможно это из-за путей
Код

define ( 'ROOT_DIR', '../../..' );


Но нужно конкретней знать в чем проблема. При eval не подключатюся файлы?
PM MAIL WWW ICQ Skype   Вверх
neoks
Дата 9.8.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата(GreatAntique @  9.8.2011,  21:29 Найти цитируемый пост)
Что значит "нет"? Выдается ошибка?

То и значит, в файле saite_mod.php используется конструкция require_once а значит второй раз уже не будет подключена.
А значит что классов и переменный не создано и возникают ошибки.

Это все должно вывести в шаблон, а шаблон генерируется через функции котором тоже не прописано global, вот такой нюанс  smile 

Как же так объяснить, мне не нужна загружать файл и затем обрабатывать через eval или еше что, мне нужно загрузить уже готовый результат как делает AJAX.

Успешно так справляется file_get_contents если подставлять адрес домена, но если убрать адрес домена то увы  smile 


PM MAIL   Вверх
GreatAntique
Дата 9.8.2011, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LAMP Developer



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.12.2009
Где: Kyiv, Ukraine

Репутация: 1
Всего: 1



тогда не понятно почему не устраивает include файла smile
PM MAIL WWW ICQ Skype   Вверх
neoks
Дата 9.8.2011, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Охх, сейчас подробно покажу.

Файл index.php
Код

function load_team($name){
    ob_start();
    include($name);
    $output = ob_get_contents();
    ob_end_clean();

    return $output;
}

$result = load_team('team.php');

print '<h3>Файл index</h3>';
print $result;


Файл team.php
Код

<h3>Файл team</h3>
<? print widget('moduls'); ?>
...
конец шаблона



Функция widget
Код

function widget($widget,$mytheme = false){
    
    if(file_exists(ROOT_DIR.'/moduls/user_widgets/'.replase($widget).'/saite_mod.php')){
        return @file_get_contents('http://'.$_SERVER["HTTP_HOST"].'/moduls/user_widgets/'.replase($widget).'/saite_mod.php'.($mytheme ? '?mytheme='.replase($mytheme) : ''));
    }
}


Файл saite_mod.php
Код

<?
print 'результат виджета';
?>


В результате получается то что мне нужна, файл index.php покажет такой результат.
Код

Файл index
результат виджета
...
конец шаблона


Если использовать include вместо file_get_contents то получем такой результат
Код

результат виджета
Файл index
...
конец шаблона


Сейчас file_get_contents почти подходит но не совсем, как я знаю у некоторых серверах например у дешовых может быть отключена вставка адресов и использовать такую функцию можно только внутри сервера.

Даже не знаю что можно придумать, может как то сделать проверку можно или нет и показывать что мов так и так нельзя  smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.