За последние 24 часа нас посетили 53688 программистов и 1768 роботов. Сейчас ищут 1711 программистов ...

Мистическая выборка из базы

Тема в разделе "PHP для новичков", создана пользователем Luter1984, 5 фев 2011.

  1. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    ***************
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Знаю.
    Это происходит от того, что кое-кто смотрит курсы Попова.
     
  3. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Хорошо и что здесь неверно....
     
  4. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Повторяяяююю мееееедлееенннееей:
    Этоооо происхоооооодит от тогооооооо, что кое-ктооооооо смоооооотрит кууууууууууурсы Попова.
     
  5. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Хорошо если код неверен, то укажите ошибку.....
    Я уже мно наслышан о курсах Попова, но самое интересное как раз он здесь не причем
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Luter1984
    Вы бы еще весь сайт выложили для определения выборки ошибки из базы.
    Для начала учитесь отлаживать и показывать данные и запросы. Почему мы должны смотреть в кучу html и делать какие-то выводы?

    Покажите структуру базы с небольшим количеством данных. Покажите запрос. Если запрос окажется безошибочным, смотрите, какие данные приходят.
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Он здесь причем потому что
    1. Ты сам теперь не можешь найти ошибку
    2. Ты не понимаешь, зачем в твоём коде do-while, а значит
    2.1 ты не понимаешь, как этот код работает и
    2.1.1 ты не можешь найти ошибку, потому что не понимаешь принцип работы этого кода

    Этого всего не происходит, когда человек учится не по видеокурсам, а по хорошим книгам.
     
  8. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    /***************
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Этот цикл выполняется хотя бы один раз. А данных-то может и не быть!

    А в этот момент кто-то другой занес запись и id вернулся другой.
    Используйте http://ru2.php.net/manual/en/function.m ... ert-id.php


    Первая картинка не загрузилась.

    Почему у tovars_id по нескольку раз одна и та же категория?
     
  10. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Действительно, у tovars_id по нескольку раз одна и та же категория, .... Теперь я совсем ничего не понимаю, совсем руки опустились....
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    ALTER TABLE table_cat_tov ADD UNIQUE KEY tovars (tovars_id, category_id); - для оптимизации



    PHP:
    1. # foreach($new_id_cat as $id_cat)
    2. #                                      {
    3. #                                          $resultat_3 = mysql_query("INSERT INTO table_cat_tov (tovars_id, category_id)
    4. #                                          VALUES ('$id_items','$id_cat')");
    5. #                                      }
    Нечего запросы в цикле делать.

    Отлаживайте!
    print_r($_POST);
    print_r($new_id_cat);
    Выводите SQL_запросы и анализируйте
     
  12. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    В двух верхних значениях tovars_id должно быть уже значение 34 (это уже 34 товар)... Проблема как раз в этом и заключается, что при добавлении нового товара, если выбраны те же категории, что и для предыдущего товара, то tovars_id добавляется как предыдущий...
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Помочь ничем не могу - у меня нет данных, я не вижу, что приходит, что отсылается и что добавляется в базу.
     
  14. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    ***************
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    АУ! Программисты не отлаживают по визуальной части! Отладка происходит на передаваемых данных, которые позволяют ориентировочно выявить сбойный код.
     
  16. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    ***************
     
  17. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я для чего все замечания выше писал? Вы же не стали mysql_insert_id Использовать. Отсюда и проблема

    Код (Text):
    1. # $resultat_2 = mysql_query("SELECT id FROM rubriki WHERE data='$ntovar_data' AND title='$ntovar_title'",
    2. #                          $databasic);
    Выбирает первую попавшуюся запись, подходящую условиям. И это далеко не последняя добавленная запись. Поэтому id может быть и предыдущего товара, а может и вообще первого.
     
  18. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Но как использовать mysql_insert_id ???
    Пожалуйста подскажите для моего кода
     
  19. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    очень просто - вместо твоего запроса, Kreker показал же.
    если не ошибаюсь, то как-то так - mysql_query("SELECT last_insert_id()", $databasic);
     
  20. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Т.е запрос:
    PHP:
    1. $resultat_2 = mysql_query("SELECT id FROM rubriki WHERE data='$ntovar_data' AND title='$ntovar_title'",$databasic);
    Нужно преобразовать к виду:
    PHP:
    1. $resultat_2 = mysql_query("SELECT last_insert_id()",$databasic);
    Но тогда в таблицу table_cat_tov попадают пустые значения tovars_id:
    [​IMG]
     
  21. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Luter1984
    а у тебя есть поле с автоматически назначаемым айди в таблице рубрик?
    id INT UNSIGNED NOT NULL AUTO_INCREMENT ?
     
  22. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Вы имеете в виду промежуточную таблицу table_cat_tov или таблицу с товарами rubriki
    В первой таблице нет id auto_increment, а во второй да! И при добавлении записи о новом товаре в таблице rubriki добавляется товар именно с новым id:
    PHP:
    1. $resultat_1 = mysql_query("INSERT INTO rubriki (meta_k,meta_d,title,cena,data,minvosrast,maxvosrast,
    2. categoryname,text) VALUES ('$ntovar_meta_k','$ntovar_meta_d','$ntovar_title','$ntovar_prais',
    3. '$ntovar_data','$ntovar_vosrast_mini','$ntovar_vosrast_maxi','$categoryname','$editor1')");
    Если же имеется в виду таблица с именами рубрик, то да, там тоже в наличии id auto_increment, но в данном коде с ней я не работаю....
     
  23. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    а так?
    SELECT last_insert_id() as `id`


    апд. хотя нет, так тоже вроде не получится. тут надо смотреть на структуру и логические связи, что куда вставляется.
    много нечитабельного кода, разбираться лень
     
  24. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Так вроде бы все работает... :D
     
  25. Luter1984

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

    С нами с:
    9 ноя 2010
    Сообщения:
    66
    Симпатии:
    0
    Но в чем причина??????