Помогите написать простенький скрипт

Тема в разделе "Как сделать...", создана пользователем ndvkerch, 11 апр 2011.

  1. ndvkerch

    ndvkerch

    Регистр.:
    26 июн 2008
    Сообщения:
    275
    Симпатии:
    74
    Помогите написать простенький скриптик весь механизм понимаю но с пхп не дружу сам неосилю
    Необходим скриптик для правки базы данных
    суть скрипта такова
    в базе данных есть 2 таблицы:
    jb_user
    `id_user` int(11) NOT NULL auto_increment,
    `pass` varchar(32) NOT NULL,
    `email` varchar(64) NOT NULL,
    `activ` enum('no','yes') NOT NULL default 'no',
    PRIMARY KEY (`id_user`),
    UNIQUE KEY `email` (`email`)
    и
    jb_board
    `id` int(11) NOT NULL auto_increment,
    `id_category` smallint(6) NOT NULL,
    `user_id` int(11) NOT NULL default '0',
    `type` enum('s','p','u','o','a','v','r') NOT NULL default 'p',
    `autor` varchar(255) NOT NULL,
    `title` varchar(255) NOT NULL,
    `email` varchar(255) NOT NULL,
    `city` varchar(255) NOT NULL,
    `city_id` smallint(6) NOT NULL default '1',
    `url` varchar(255) NOT NULL,
    `click` smallint(6) NOT NULL default '0',
    `contacts` text NOT NULL,
    `text` text NOT NULL,
    `price` int(11) NOT NULL,
    `video` varchar(128) NOT NULL,
    `hits` int(11) NOT NULL default '0',
    `old_mess` enum('new','old') NOT NULL default 'new',
    `checked` enum('yes','no','edit') NOT NULL default 'no',
    `checkbox_top` smallint(1) NOT NULL default '0',
    `top_time` datetime NOT NULL default '0000-00-00 00:00:00',
    `send_notice_vip_sms` smallint(1) NOT NULL default '0',
    `checkbox_select` smallint(1) NOT NULL default '0',
    `select_time` datetime NOT NULL default '0000-00-00 00:00:00',
    `send_notice_select_sms` smallint(1) NOT NULL default '0',
    `tags` varchar(255) NOT NULL,
    `send_notice_day` smallint(1) NOT NULL default '0',
    `time_delete` smallint(6) NOT NULL default '30',
    `date_add` datetime NOT NULL,
    PRIMARY KEY (`id`),
    KEY `id_category` (`id_category`),
    KEY `city_id` (`city_id`),
    KEY `user_id` (`user_id`),
    KEY `email` (`email`)

    необходио в цикле пройтись по всем записям jb_user
    с условием если поле `activ`='yes' тогда запомнить поля `id_user` и `email`
    и сделать запрос с этими переменными (UPDATE `base`.`jb_board` SET `user_id` = '$id_user' WHERE `jb_board`.`email` = '$email' LIMIT 100 ;) к таблице jb_board
    цикл закончить когда закончятся все записи в таблице jb_user
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Объясните, для чего в таблице jb_board присутствует поле email. Достаточно этого поля в jb_user. А в SQL запросах использовать JOIN. Тогда и задачи такой не возникнет.
     
  3. ndvkerch

    ndvkerch

    Регистр.:
    26 июн 2008
    Сообщения:
    275
    Симпатии:
    74
    ну базу не я писал так задумал разработчик.
    В первой базе это список пользователей в ней email поле уникальное (т.е. они не могут повторяться)
    Вторая база это база объявлений в ней может быть несколько объявлений с одним мылом, я только недавно включил опцию добавлять объявления только зарегистрированным и по этому у большинства старх объвлений поле user_id равно 0 по умолчанию. Я просто хочу с помощью скрипта или может можно обойтись просто запросом к базе данных отредактировать базу и присвоить верный user_id для всех объявлений на мыло которых зарегистрировались пользователи. Мне просто не хватает знаний как грамотно это сделать в цикле чтобы пробежалось по всей базе и присвоило нужный user_id
     
  4. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Попробуй так, не проверял, но вроде должно пойти
    PHP:
    <?php
    $query 
    =    "SELECT * FROM jb_user WHERE activ='yes'";
    $ctg mysql_query($query);    


    for(
    $i=0$dupa mysql_fetch_array($ctg); $i++)
        {
    $query1 =    "SELECT * FROM jb_board  WHERE email LIKE '%$dupa[email]%'";
        
    $ctg1 mysql_query($query1);
        for(
    $s=0$dupas mysql_fetch_array($ctg1); $s++)
        {
         
    $query2 "UPDATE jb_board SET user_id=".$dupa['user_id']."
                    WHERE email="
    .$dupas['email']; 
      
    mysql_query($query2);
        }
        }
    ?>
     
    ndvkerch нравится это.
  5. ndvkerch

    ndvkerch

    Регистр.:
    26 июн 2008
    Сообщения:
    275
    Симпатии:
    74
    Спасибо за помощь
    код конечно же с наскоку не запустился но дал повод для размышления и помог разобраться. Второй цикл оказался лишним вот что в конечном итоге у меня заработало;
    PHP:
    <?php
    define
    ('SITE',true);
    include(
    "../admin/conf.php");
    $query "SELECT * FROM jb_user WHERE activ='yes'";
    $ctg mysql_query($query);    
    for(
    $i=0$dupa mysql_fetch_array($ctg); $i++)
        {
         
    $query2 "UPDATE jb_board SET user_id='".$dupa['id_user']."' WHERE email='".$dupa['email']."'";
         
    mysql_query($query2);
        }
    ?>