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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимальный алгоритм запросов, Правильный ли подход 
:(
    Опции темы
KonstRuctor
Дата 30.5.2012, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет всем!
Введение.
Есть две таблицы, в которых хранятся данные юзеров.
table1:
id | user_id | text1
table2:
id | user_id | text2
Юзер сам из своего кабинета заполняет эти данные. 
Может заполнить текст в любой таблице, может в двух, может вообще ничего не заполнять.
Задача: 
проверить, есть ли записи, и если есть -- вывесть результат.
Мой метод.
Код

// для работы имею массив $user с основными данными юзера
// начинаю работу тут
$q = $sql->query("SELECT * FROM table1 WHERE user_id = '".$user["userid"]."'
                union
                SELECT * FROM table2 WHERE user_id = '".$user["userid"]."' ");
if ( mysql_num_rows($q) )
{
        echo "<h1>Данные юзера:</h1>\n";
            $res = $sql->query("SELECT text1 FROM table1 WHERE user_id = '".$user["userid"]."'");
            if (mysql_num_rows($res)>0)
            {
                echo "Данные 1:<br />\n";
                while ( $row = mysql_fetch_assoc($res) )
                {
                    echo "<strong>". $row["text1"] ."</strong><br />\n";
                }
            }
            $res2 = $sql->query("SELECT text2 FROM table2 WHERE user_id = '".$user["userid"]."'");
            if (mysql_num_rows($res2)>0)
            {
                echo "<br />Данные 2:<br />\n";
                while ( $row = mysql_fetch_assoc($res2) )
                {
                    echo "<strong>". $row["text2"] ."</strong><br />\n";
                }
            }
}

Обсуждение.
Я разделил все на 3 запроса, так как хочу добиться, что если юзер ничего не заполнил, то ничего и не выводить.
Если хоть что-то есть -- выводим заголовок и данные.
Вопрос:
Можно ли решить эту задачу более оптимально? Спасибо!
PM MAIL WWW ICQ   Вверх
solenko
Дата 30.5.2012, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

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



Код

SELECT table1.*, 'table1' as datasource FROM table1 WHERE user_id = ...
UNION
SELECT table2.*, 'table2' as datasource FROM table2 WHERE user_id = ...


Это сообщение отредактировал(а) solenko - 30.5.2012, 15:04


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
KonstRuctor
Дата 30.5.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Весь вечер бьюсь, не могу решить эту задачу по вашему алгоритму.
Делаю так:
Код

// делаю запрос по вашей рекомендации
// .....
// далее
$num_r = mysql_num_rows($q);
// если юзер заполнил хоть что-нибудь
if ( $num_r )
{
                echo "<h2>Данные юзера</h2>";
        // наполняю массив $rows данными
                $rows = array();
        while($row = mysql_fetch_assoc($q))
        {
            $rows[] = $row;
        }
        // разбираем первый массив
                // здесь мне нужен залоголовок Первые данные юзера
                foreach ( $rows as $key=>$value )
        {
            if ( $value['datasource'] == 'table1' )
                    {
                echo "<li>".$value['text1']."</li>\n";
            }
        }
                // разбираем второй массив
                // здесь мне нужен залоголовок Вторые данные юзера
        foreach ( $rows as $key=>$value )
        {
            if ( $value['datasource'] == 'table2' )
                    {
                          echo "<li>".$value['text2']."</li>";
            }
        }
}

Что-то у меня ничего не выходит...
Мне надо выводить заголовки, только если есть заполненные данные...
Но заголовок нужен только один раз.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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