За последние 24 часа нас посетили 18127 программистов и 1699 роботов. Сейчас ищут 1503 программиста ...

отшлифовка кода: 4 запроса к 1 таблице

Тема в разделе "PHP и базы данных", создана пользователем _ib_, 7 июн 2006.

  1. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    Доброе время суток,

    есть таблица, к которой я обращаюсь 4 раза, т.к. используется 4 цикла.
    старый код, но работающий:
    Код (Text):
    1.  
    2. $query = "SELECT * FROM MYTABLE ";
    3. $result1 = mysql_query($query) or die("Query failed : " . mysql_error());
    4. $result2 = mysql_query($query) or die("Query failed : " . mysql_error());
    5. $result3 = mysql_query($query) or die("Query failed : " . mysql_error());
    6. $result4 = mysql_query($query) or die("Query failed : " . mysql_error());
    7.  
    8. while($row = mysql_fetch_object($result1)) {....}
    9. .....
    10. while($row = mysql_fetch_object($result2)) {....}
    11. .....
    12. while($row = mysql_fetch_object($result3)) {....}
    13. ......
    14. while($row = mysql_fetch_object($result4)) {....}
    15. ....
    16. mysql_free_result($result1);
    17. mysql_free_result($result2); и т.д.
    18.  
    19. mysql_close($db_open);
    пробывал написать вместо result1-4 просто result, т.е. сделать через 1 переменную, но тогда не вся информация выводится как надо.

    можно ли как-нибуть этот код по уму изменить?
     
  2. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    а зачем делать один и тот же запрос к базе 4 раза, а потом еще и 4 цикла по ним?
    в одном цикле не написать?

    PS: в качестве аватарок использовать можно только свое фото.
     
  3. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    я над этим много думал, но к сожалению-нельзя :?
    потомучто в разных местах страницы надо вывести разные данные с таблицы и между выводами находиться другой код, поэтому в 1 цикл это не закинешь.

    тут по ходу дела возникает у меня еще один вопросик:
    можно ли как в Exel [$C1=$B1+$A1*3] сделать столбец, который есть арифметичкое выражение предыдущих столбцов?
     
  4. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    ниче не понял.
    у вас что $result1 что $result4 хранит одни и теже данные? тоесть однозначно $result1 === $result4 ?
    нафига тогда делать четыре одинаковых запроса, которые дают одно и тоже
     
  5. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Угу, такое впечатление что сохранить результат(ы) в переменную а потом ее выводить тебе религия не позволяет :)
     
  6. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    можно
    На мой взгляд правильнее Вам сделать один запрос к базе данных и записать его в массив, который после использовать, потому как каждое обращение к базе - это дополнительная нагрузка на базу и снижение общей производительности.

    Да можно
    SELECT (B + A * 3) as C, ... FROM ....
     
  7. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  8. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    в том то все и дело, что я пробывал с одной переменнолй, но трубуемый результат не достигался.
     
  9. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    я чукча, и не рилигиозный :) !
    был бы рад, но еще не знаю как.
    ты наверное имеешь ввиду тоже самое,что и
    ок, попробую, пошел инфу искать.....
    вот именно поэтому я начат эту тему ;)
    это для вывода :)..... как я понял, архитектура SQL не позволяет такое сделать, чтобы при вводе других столбцов изменялись данные третьего.
    прийдется делать ввод через пхп в столбеч как арифмет.выражение.
     
  10. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
  11. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    А еще в php есть куча управляющих структур(акромя while), т.е. если продумать нормальную логику, то мне каца что можно обойтись одним правильно написаным запросом к DB и несколькими условиями для вывода информации :D
     
  12. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    :roll: и у тебя есть желание мне помочь :?:
     
  13. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Нужна полная постановка задачи, а не то что та написал
    Select ....
    Select ....
    Select ....
    Select ....
    While..... и т.д.
     
  14. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    1. таблица вывода выгдялит так:

    ---------------------------------------------------
    |Фирма | общий тариф | залог | сумма |
    |---------------------------------------------------|
    |__F____|____T_______|___Z_| T+Z__ | --->тут вывод всех по цыклу
    |--------------------------------------------------|
    |Фирма | особый тариф | залог | сумма |
    |--------------------------------------------------|
    |__F____|____OT______|___Z_|_OT+Z | --->тут вывод всех по цыклу

    2. надо выделить ячейку, а лучше TR, с самой малеькой Суммой.

    3. можно без выделения, если будет сортировка по возрастанию СУММЫ.

    DB выглядит так :
    F | T | OT | Z | id
     
  15. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    id уникальный?
     
  16. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
  17. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    если есть у тебя ася, то буду рад по асе.
     
  18. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  19. def

    def Активный пользователь

    С нами с:
    24 апр 2006
    Сообщения:
    230
    Симпатии:
    0
    Адрес:
    Питер
    :)

    автору: еще раз прочитать http://ru.php.net/manual/ru/function.my ... a-seek.php

    конкретно

     
  20. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  21. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    Господа, как я понял mysql_data_seek перекидывает указатель на определённую строку(запись) ДБ-таблицы (если не прав то поправте), поэтому тут mysql_data_seek не нужет, т.к. вывод идеть в 1 и 2 таблице(на вэб-странице) ВСЕХ элементов(всех строк или записей,кому как угодно), только выводятся разные столбцы из этих ДБ-таблиц.
     
  22. def

    def Активный пользователь

    С нами с:
    24 апр 2006
    Сообщения:
    230
    Симпатии:
    0
    Адрес:
    Питер
    ключевая фраза выделена.

    PHP:
    1. <?
    2. $query = "SELECT * FROM MYTABLE ";
    3. $result = mysql_query($query) or die("Query failed : " . mysql_error());
    4.  
    5. while($row = mysql_fetch_object($result)) {....}
    6. //.....
    7. mysql_data_seek($result,0);
    8. while($row = mysql_fetch_object($result)) {....}
    9. //.....
    10. mysql_data_seek($result,0);
    11. while($row = mysql_fetch_object($result)) {....}
    12. //......
    13. mysql_data_seek($result,0);
    14. while($row = mysql_fetch_object($result)) {....}
    15. //....
    16. ?>
    17.  
     
  23. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    :lol: а.....так вот ты какой, Северный олень.... :wink:

    теперь понятно, почему вывод был не такой, как желалось.

    я думал, что при повторном использовании
    быдет все строки , начиная с id 1 и до конца прочитаны....
    теперь понятно, что там "указатель" остается снизу. :twisted:

    Спасибки за настойчивость, что несмотря на 4 ответа, еще раз написали.
     
  24. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я вот думаю а не завести ли форум для извращенцев, которые садаться писать, абсолютно не понимая что делают, и не читают мануал в принципе?
     
  25. _ib_

    _ib_ Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    21
    Симпатии:
    0
    если там такие как ты будут на вопросы отвечать, то почему бы и нет! :twisted:

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

    Извращенцы скорее всего те, кто над "извращенцами" извращается!

    и не надо флудить не по теме :!: