[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    попробуйте после коннекта сделать SET NAMES 'cp1251_bin';
     
  2. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Art!P Не совсем понел зачем тут
    Code:
    SELECT * FROM wp_wnm_blogs_tree WHERE blog_id IN (1,38,37,36,35,33)) AS t1
    
    вроде так тоже самое
    Code:
    SELECT DISTINCT left_key, right_key, blog_id, level
    FROM wp_wnm_blogs_tree
    WHERE level = (SELECT MIN(level)  FROM wp_wnm_blogs_tree WHERE blog_id IN (1,38,37,36,35,33))
    ORDER BY left_key;
    
    и в вашем запросе небыло вхождения в глубину дерева
     
  3. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Подскажите пожалуйста по оптимизации. Есть база данных, в которой есть список записей. Когда их в базе скапливается несколько тысяч, и идет вывод всего этого на страницу, то все глючит. Как мне выводить их, например, по 100 штук? Т.е. выбрал с базы 100 последних записей, вывел. И потом еще 100, и так далее (если нажмут кнопку "далее"). Подскажите примерный алгоритм.
     
  4. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Limit
     
  5. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    mironich, да, спасибо, прочитал по limit и order by, вопросов больше нет :)
     
  6. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    IN, где указывать в предикате или в источнике по сути не важно. Чтобы логически легче понять можно включить во фром. Как удобно.
    поиск минимальных с левелом это одно. А выбор всех дочерных веток в дереве, это как?
    Т.е. после фильтра по blog_id, определяется минимальный левел (например level =2).
    Дальше надо выбрать все дочерние (начиная от left_key), в ветке которой есть хотя бы один минимальный левел?
    Выбрана все строки (красным), это ветка в котором есть min
    [​IMG]
    Ну или как? киньте кусок таблицы.
     
  7. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    добрый день. прошу скинуть ссылку на статью про нормальне формы таблиц написаную на языке "таблицы - записи" а не " отношения - ячейки". и чтобы можно было понять. желательно с примерами.
     
  8. Metal-Core

    Metal-Core Member

    Joined:
    20 Sep 2011
    Messages:
    226
    Likes Received:
    21
    Reputations:
    0
    Каким образом получить значения стоящие с права от колонки 'Age', тоесть найти по указаным значениям, и от найденных взять содержимое с соседний колонки?
    побывал так:

    [​IMG]
     
  9. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Code:
    SELECT нужная колонка FROM таблица WHERE то что тебе надо
     
  10. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Поподробнее.
     
  11. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    наверное слева а не справа потому что справа я нечего не вижу.
    если правильно понял вопрос то
    "select last_name where age == '16' ;
    получим moroz/
    если надо именно по позициям двигатся используй
    mysql_fetch_array правда я бы это делал если бы это было крайне принципиально. потому что код теряет прозрачность которая присутсвует при использовании mysql_fetch_assoc
     
    #1691 barnaki, 17 Apr 2012
    Last edited: 17 Apr 2012
  12. Metal-Core

    Metal-Core Member

    Joined:
    20 Sep 2011
    Messages:
    226
    Likes Received:
    21
    Reputations:
    0
    Да да.. сори не мног попутал :D . Это уже ближе к истине.. ну задейтвовать while и норм будет.
    .. Все решил проблему..
     
    #1692 Metal-Core, 17 Apr 2012
    Last edited: 17 Apr 2012
  13. dokwill

    dokwill New Member

    Joined:
    25 Jun 2007
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    $sql = mysql_query ('SELECT * FROM `make-range` WHERE MAKE_ID= "'.$act.'" ORDER by RANGE_NAME');
    $new_model=mysql_fetch_array($sql);
    $sql = mysql_query ('SELECT * FROM `AUDACON_TB_AUDATYPE` WHERE RANGE_ID = "'.$new_model['RANGE_ID'].'"');
    $model_data=mysql_fetch_array($sql);

    // Рисуем табличку
    $table = "<table border=1 width=100% align=center>\n";
    $table .= "<tr>\n";
    $table .= "
    <td width=150><b><font size=3><a href='".$new_model['link']."'>".$new_model['RANGE_NAME']."<a></td>
    <td width=150><a>".$model_data['BUILD_FROM']."</a></td>
    <td width=150><a>".$model_data['BUILD_TO']."</a></td>
    </font></b></td></tr>\n";
    $table .= "</tr>\n";
    $table .= "</table>\n";

    echo $table;

    Добрый день. скрипт
    Выводит только первую строку выборки.
    как вывести массив значений. Подскажите пожалуйста
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    dokwill Примеры смотрите http://ru2.php.net/mysql_fetch_array
     
    _________________________
  15. restart05

    restart05 New Member

    Joined:
    20 Feb 2012
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Помогите с проблемой. Имеется таблица: x1, x2.

    Структура x1:
    id title status
    1 1 1
    2 1 1
    3 1 1

    Структура x2:
    id x1id rang
    1 1 3
    2 1 4
    3 1 5

    Здесь: x1id(таблица x2)==id(таблица x1)

    Какой запрос мне сделать к БД mysql, чтоб вывести все таблицы с x1 + посчитав rang с x2 (sum(`rang`)/count(`rang`))
     
  16. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    это обычная выборка, в одном запросе может так выглядеть
    SELECT * FROM x1, (SELECT (SUM(x2.rang)/COUNT(x2.rang)) AS s FROM x2) AS newtab
    PS. *
     
    #1696 Art!P, 27 Apr 2012
    Last edited: 27 Apr 2012
  17. restart05

    restart05 New Member

    Joined:
    20 Feb 2012
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    AS newtab что делает не совсем понял, + куда мне нужно вставить WHERE, чтобы связать ид x1id=id
     
  18. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Агрегация - (SELECT (SUM(x2.rang)/COUNT(x2.rang)) это среднее арифметическое значение из x2.rang. Это одно число.
    Связи между х1 и х2 в запросе нет, если она нужна объясните для чего?
     
  19. restart05

    restart05 New Member

    Joined:
    20 Feb 2012
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Мне нужно вывести всю информацию с таблицы x1 + среднее арифметическое c x2

    Пример:

    ID Title Status Rang(SUM(x2.rang)/COUNT(x2.rang))
    1 1 1 3(среднее арифметическое с x2.id=x1.id(=1))
    2 1 1 5(среднее арифметическое с x2.id=x1.id(=2))

    и так далее

    Можно конечно это сделать отдельным запросом, но тогда кол-во запросов увеличивается в кол-во столбцов
     
    #1699 restart05, 28 Apr 2012
    Last edited: 28 Apr 2012
  20. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Спасибо за уточнения.
    тогда же другое дело :D
    попробуйте так
    SELECT x1.*, (SELECT (sum(x2.rang) / count(x2.rang))FROM x2 WHERE x1.id=x2.x1id) AS s
    FROM x1
    GROUP BY x1.id;
     
Thread Status:
Not open for further replies.