За последние 24 часа нас посетили 62917 программистов и 1679 роботов. Сейчас ищут 982 программиста ...

проблемма с кодом UPDATE в базе

Тема в разделе "PHP для новичков", создана пользователем serj011, 15 дек 2012.

  1. serj011

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

    С нами с:
    18 апр 2010
    Сообщения:
    279
    Симпатии:
    0
    Код (Text):
    1. $result5 = mysql_query("SELECT date_d, date_m, date_y, time, date FROM messages",$db);
    2.  
    3. while ($myrow5 = mysql_fetch_array ($result5)){
    4.  
    5. $mysqldate = "$myrow5[date_y]-$myrow5[date_m]-$myrow5[date_d] $myrow5[time]";
    6.  
    7. $time = strtotime($mysqldate);
    8.    
    9. $result = mysql_query ("UPDATE messages SET date='$time'");
    10.  
    11. }
    в таблице дата храниться следующим образом date_y(год), date_m(мес), date_d(день) и time(время 12:20)
    в новой ячейке (date) хочу преобразовать обычную дату в UNIX время....
    код для преобразования нашел
    $mysqldate = "2012-12-28 12:20";
    $time = strtotime($mysqldate);

    проблемма с кодом для UPDATE. ничего не могу понять, вроде простенькая задача и код правильный, а не получается. после запуска кода он обновляет все строки подставляя одно и то же значние в каждую строку!?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну так WHERE в UPDATE-запросе не указан - вот он и обновляет все записи каждым запросом.
    Но вообще тут можно обойтись без цикла и одним SQL-запросом:
    Код (Text):
    1. UPDATE `messages` SET `date` = UNIX_TIMESTAMP(CONCAT(`date_y`, '-', `date_m`, '-', `date_d`, ' ', `time`));
     
  3. serj011

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

    С нами с:
    18 апр 2010
    Сообщения:
    279
    Симпатии:
    0
    прикольно)))) работает, спасибо)
    sobachnik, все равно не могу сообразить, что нужно указывать в WHERE в UPDATE-запросе? Я думал если не указываешь WHERE, он берет первую строку, обновлят, потом вторую и т.д. Подскажи пожалуйста, что нужно указывать что бы одновлять поочердно каждую строку?

    вот допустим примрно такая же задача
    нужно обновить все строки и установить значения id с 1 и по порядку до конца...

    $result5 = mysql_query("SELECT id FROM foto_user",$db);
    $i=1;
    while ($myrow5 = mysql_fetch_array ($result5)){
    $result = mysql_query ("UPDATE foto_user SET id='$i'");
    $i++;
    }
    тут такая же проблемма(
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если не указать условие в WHERE - то обновляются все строки. Если есть условие - то только те строки, которые подходят под указанное условие. Можешь так написать, например:
    Код (PHP):
    1. $result5 = mysql_query("SELECT `id` FROM `foto_user`", $db);
    2. $i = 1;
    3. while($myrow5 = mysql_fetch_assoc($result5)) {
    4.     mysql_query("UPDATE `foto_user` SET `id` = '$i' WHERE `id` = {$myrow5['id']}");
    5.     $i++;
    6. } 
    PHP и MySQL - это две разные программы. MySQL ничего не знает, о том, что там за PHP-скрипт у тебя и понятия не имеет, что там за циклы в скрипте. Он просто получает от PHP запросы и выполняет их.
    Вообще-то, это не нужно :) Так не делают. И пробелы в последовательности id - никому не мешают.
     
  5. serj011

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

    С нами с:
    18 апр 2010
    Сообщения:
    279
    Симпатии:
    0
    Супер спасибо)
    В моем случае делают))) Я просто хочу соеденить данные двух таблиц из разных баз, а id совпадают
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    И что? о_О
     
  7. serj011

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

    С нами с:
    18 апр 2010
    Сообщения:
    279
    Симпатии:
    0
    у меня к этому id есть атрибуты auto_increment и primary key. разве значения в таком случае могут быть одинаковыми?
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Не могут. Только причём тут это вообще? У первой таблицы свои id, у второй - свои. И пусть они одинаковые - как это мешает? Не понятно, что ты пытаешься сделать, что имеешь в виду под "соеденить данные двух таблиц из разных баз".
     
  9. serj011

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

    С нами с:
    18 апр 2010
    Сообщения:
    279
    Симпатии:
    0
    sobachnik, все что я пытался сделать, я сделал))) с твоей помошью, спасибо)))
    А вообще
    соеденить две одинаковые таблицы с разными данными из разных баз в одну))))))))))
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну и всё равно не вижу никакого смысла в том, чтобы пересчитывать id с 1 и по порядку. Можно было бы просто дописать записи из одной таблицы в другую, а id для добавляемых записей задать новые, не копируя их из старой таблицы.