За последние 24 часа нас посетили 18470 программистов и 1607 роботов. Сейчас ищет 881 программист ...

UPDATE в цикле. Что не так делаю?

Тема в разделе "PHP для новичков", создана пользователем LAlexS, 27 мар 2014.

  1. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Код (Text):
    1. $result = mysql_query("SELECT code FROM product_info WHERE parent_brand = 18");
    2.  
    3. $d = 1;
    4.  
    5. while ($result2 = mysql_fetch_array($result))
    6. {  
    7.     $code = "obs".$d;
    8.     mysql_query ("UPDATE product_info SET code='$code'");
    9.     $d++;
    10. }
    Цель присвоить код для выбранных позиций. Но он присваивает одно и то же число, причем всем строкам в базе. Что я не так делаю?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    надо условие WHERE, которое бы ограничивало записи только теми, которые тебе нужны в данный момент. разве не очевидно?
    SQL оперирует множествами, а не какой-то мифической "текущей позицией фиг знает где". так укажи какое множество надо изменить.
     
  3. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Мне казалось, что я в выборке до цикла задал это условие. Хватит условия только в самом цикле?
     
  4. maxycwebber

    maxycwebber Новичок

    С нами с:
    25 мар 2014
    Сообщения:
    263
    Симпатии:
    11
    Адрес:
    Gdansk
    надо и там и там
    эти 2 выборки между собой не взаимосявзаны
     
  5. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Все-равно не работает. По условиям выборки получается 383 записи, и она ставит на все 383 записи одинаковое значение obs383, не начиная с obs1 и т.д. а на все одинаковый
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    завязывай с программированием. серьезно!
     
  7. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Невероятно дельный совет! Очень помог
     
  8. maxycwebber

    maxycwebber Новичок

    С нами с:
    25 мар 2014
    Сообщения:
    263
    Симпатии:
    11
    Адрес:
    Gdansk
    незачто
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    вот блин, пытаюсь сформулировать так чтобы ты понял, а получается что цитирую тебя же: если условие включает в себя все 383 записи, будут изменены все 383 записи. что ты приказал сделать, то и делается.

    укажи в условии какая именно 1 (одна!!!) запись должна получить уникальное, черт побери, значение. и она его получит. потом адресуй другую запись другим условием и т.д. — 383 уникальных условия. а не 383 раза по 383 записи враз. понял, нет?
     
  10. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Выбираю множество по условию
    Код (Text):
    1. $result = mysql_query("SELECT * FROM product_info WHERE parent_brand = 18");
    Задаю начальное значение переменной
    Код (Text):
    1. $d = 1;
    Запускаю цикл, который пройдет по порядку по выбранному множеству
    Код (Text):
    1. while ($result2 = mysql_fetch_array($result))
    2. {
    Создаю переменную, которую хочу вставить
    Код (Text):
    1. $code = "obs".$d;
    обновляюю указывая условие (я так понимаю здесь видимо кроется лажа?). Но у меня условие только это.
    Код (Text):
    1. mysql_query ("UPDATE product_info SET code='$code' WHERE parent_brand = 18");
    +1 к переменной
    Код (Text):
    1. $d++;
    закрываю скобочку
    Код (Text):
    1. }
    Я не спорю, что где-то не врубаюсь и делаю по идиотски. Прочитал последнее сообщение и вроде все понял. Но раз не работает - значит что-то упустил.
     
  11. maxycwebber

    maxycwebber Новичок

    С нами с:
    25 мар 2014
    Сообщения:
    263
    Симпатии:
    11
    Адрес:
    Gdansk
    проблема больше в том, как вы проблему описываете и заставляете кроточащий моск программиста отвлекаться и вникать в вашу задачу глубже. =)
     
  12. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    artoodetoo Вроде правильно понял какую я задачу преследую.
    Что касается проблемы, то я реально не вижу где тут лажаю! Если бы получилось самому разобраться, то сюда бы не писал.
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    все нужные слова написаны. отхлестай себя по щекам или прими ледяной душ, что-нибудь сделай чтобы тебя вштырило, наконец.

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

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Вопрос снят. Решение найдено! Суть такой лажи в моей невнимательности или усталости.

    Кому интересно:
    Код (Text):
    1. $result = mysql_query("SELECT * FROM product_info WHERE parent_brand = 18");
    2.  
    3. $d = 1;
    4.  
    5. while ($result2 = mysql_fetch_array($result))
    6. {  
    7.     $id = $result2['id'];
    8.     $code = "obs".$d;
    9.     mysql_query ("UPDATE product_info SET code='$code' WHERE id = '$id'");
    10.     $d++;
    11. }
    А могли бы сразу сказать, что я id проморгал

    Добавлено спустя 1 минуту 36 секунд:
    А вообще artoodetoo все правильно сделал, что заставил поглубже покопаться. Зато в следующий раз такую лажу не пропущу. Спасибо!
     
  15. maxycwebber

    maxycwebber Новичок

    С нами с:
    25 мар 2014
    Сообщения:
    263
    Симпатии:
    11
    Адрес:
    Gdansk
    вот же.
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    обычно так и происходит. потом через неделю этот же тупень приходит и задает точно такой же вопрос, только имя таблицы другое. вот хочется чтобы иногда получалось лучше.
     
  17. rainarr

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

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    Рукалицо.бмп
    Никто не знает как ты называешь ячейки в таблице.
    Автор, зачем тебе переменная $d ?