За последние 24 часа нас посетили 35484 программиста и 1818 роботов. Сейчас ищут 953 программиста ...

Запрос MySQL в виде массива.

Тема в разделе "PHP для новичков", создана пользователем incomer, 25 апр 2009.

  1. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    Запрос MySQL в виде массива.

    Через форму отправляю переменные - название статьи title и через checkbox - массив авторов autor (т.е. id из таблицы man).
    Массив autor предварительно обрабатываю implode - записываю в строку через запятую и записываю значения в базу.

    «article»
    |id| title |autor |
    |1 | PHP |2;3;7 |
    |2 | HTML |1;4 |
    |3 | WWW |5;8 |

    «man»
    |id| name |
    |1 | Иванов |
    |2 | Петров |
    |3 | Сидоров|


    Вот код:

    PHP:
    1.  
    2. <?php
    3. include ("blocks/bd.php"); /*подключаемся к базе */
    4. ?>
    5. <html>
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    8. <title></title>
    9. </head>
    10. <body>
    11. <form name='form1' action='test.php' method='post'>
    12. <label>Название статьи : <input name='title' type='text'></label>
    13. <br>      
    14. <label>Авторы :<br>
    15. <?php
    16. $sql = mysql_query("SELECT id, name FROM man", $db);
    17. $res = mysql_fetch_array ($sql);
    18.  
    19. do { printf ("<input type='checkbox' name='autor[]' value='%s'>%s<br>", $res ["id"], $res ["name"]);  }
    20. while ($res = mysql_fetch_array ($sql));
    21. ?>
    22. </label>
    23. <input type='submit' name='submit' value='Сохранить'></p>
    24. </form>
    25.  
    26. <?php
    27. /*смотрим что переданные переменные*/
    28. echo "<pre>";
    29. print_r ($_POST);
    30. echo "<pre>";
    31.  
    32. /*создаем переменные из глобального массива*/
    33. if (isset($_POST['title'])) {$title = $_POST['title'];  if ($title == '') {unset($title);}}
    34. if (isset($_POST['autor'])) {$autor = $_POST['autor'];  if ($autor == '') {unset($autor);}}
    35.  
    36. $autor2 = implode(";", $autor); /* объединяет элементы массива в строку  */
    37.  
    38.  
    39. /* если  существуют, то добавляем в базу*/
    40. if (isset($title) && isset($autor) )
    41. {
    42. $result = mysql_query ("INSERT INTO `article` (title,autor) VALUES ('$title','$autor')");
    43.     /* Проверка */
    44.     if ($result == 'true') {echo "данные добалены";}
    45.     else {echo "данные не добалены";}
    46. }
    47. echo "<br><br>";
    48. /* вывод данных из базы*/
    49. $sql2 = mysql_query("SELECT * FROM article ", $db);
    50. $res2 = mysql_fetch_array ($sql2);
    51.  
    52. do { printf ("Статья - %s, авторы - %s <br>", $res2 ["title"], $res2 ["autor"]);  }
    53. while ($res2 = mysql_fetch_array ($sql2));
    54. ?>
    55. </body>
    56. </html>
    57.  
    58.  
    Прошу помощи решить следующие вопросы:
    1) предполагаю выводить в общем списке название статей и всех авторов. Как поместить строку/массив autor в запрос к таблице man и вывести рядом с название статьи?
    2) и как потом при необходимости делать выборку статьей по авторам, когда авторы записаны в строку? Отразится ли на скорость обработки всех данных? Есть ли альтернативный способ записи авторов?
    3) когда записываю в базу параметры при обновлении страницы данные дублируются, что есть лишнее?

    Спасибо.

    [/php]
     
  2. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Либо. Копай в строну связей типа many-to-many: много статей имеют много авторов - и наобарот - много авторов имеют много статей:
    [sql]select ...
    from article
    join article_man on (article_man.article_id = article.id)
    join man on (man.id = article_man.man_id)[/sql]

    Либо. В поле author можно писать id через запятую: 1,3,6,11. а ескать функией find_in_set('6', '1,3,6,11'). Правда, без понятия насколько удобно/быстро это будет работать при join`е таблиц article и man:
    [sql]select ... from article, man
    where find_in_set(man.id, article.autor)[/sql]
     
  3. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    Оперативности ответов просто поражает. Спасибо lexa.
    Второй вариант пока мне более понятен, пробую применить, пригодилась бы ссылочка по функции find_in_set .
     
  4. akrinel

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

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
  5. ATI

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

    С нами с:
    3 янв 2008
    Сообщения:
    254
    Симпатии:
    0
    Адрес:
    Москва
    Автор, из головы попова выкинь.
     
  6. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    я и попова читал/смотрел ))
    Не спорю, форумы заставляют думать. Вот сижу и думаю, неужто все умными родились, а как же сравнивать, что есть хор, а что уд.
    Да и что за манеры подковырнуть, уколоть.
    Всему свое время, научимся и посложнее вопросы задавать. Дайте подумать над вышеизложенным.
     
  7. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    incomer, не все умные родились, но стали благодаря тому, что ответы сами искали, а не вопросы на форумах учились задавать. Форум - последнее место куда стоит идти. Приоритет должен быть такой:
    1. http://php.net
    2. http://yandex.ru
    3. http://google.com
    4. http://phpclasses.org
    n. ...
    9999. различные форумы
     
  8. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    lexa, и за эти ссылочки спасибо, учту. Раздел форума «для начинающих» на php.ru – для меня находка :), т.к. свободное время я больше уделяю семье, а в Инете столько много инфо, что глаза разбегаются.
    Для ATI: HTML я по книжкам на 3 выучил, а вот с PHP книжки не помогали, wikipedia чуть помогла, а видеоуроков именно на русском и не нашел. Везде Попов, что мне оставалось. Попову я уважение отдаю за то, что у меня желание не пропало в учении. Терь вот мануалы читаю, понять не все удается - беда в моем храмом английском.
    Лано парни, не судите строго, я же к Вам как к логопедам пришел.