За последние 24 часа нас посетили 20385 программистов и 1083 робота. Сейчас ищут 784 программиста ...

"дубликаты" в строке SELECT

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

  1. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    ВСЕМ доброго дня.
    прошу внимания и совета программистов.
    вот код:
    PHP:
    1.  
    2. <?php
    3. $sql = "SELECT comm.id, comm.date, comm.text, film.title, man.name
    4.     FROM comm, film, man
    5.     WHERE $id = comm.id_org
    6.     AND man.id = comm.id_man
    7.     AND film.id = comm.id_film";
    8. $query = mysql_query($sql, $db);
    9. $row= mysql_fetch_array ($query, MYSQL_ASSOC);
    10.  
    11. /* результат в первой строке */
    12. echo "<pre>";
    13. print_r ($row);
    14. echo "</pre>";
    15. ?>
    16.  
    Вопрос: как в SELECT получить еще один столбец man.name по условию WHERE man.id = comm.id_man_editor ? задумка такая – получить имена (name) людей, которые создали комментарий и редактировали.

    ВСЕМ спасибо!
     
  2. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    если я правильно понял твой вопрос

    Код (Text):
    1.  
    2. SELECT comm.id, comm.date, comm.text, film.title, man.name, j.name
    3. FROM comm, film, man
    4. LEFT JOIN
    5. (
    6.     SELECT id, name
    7.     FROM man
    8. ) AS j ON comm.id_man_editor = j.id
    9. WHERE $id = comm.id_org
    10. AND man.id = comm.id_man
    11. AND film.id = comm.id_film
    в j.name будет имя, только если comm.id_man_editor равен man.id в этой строчке
    в противном случае NULL

    как то так, может напутал чего, просто направление показываю
    хотя с точки зрения производительности может будет разумнее 2 запроса сделать и обработать в php
     
  3. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    SDR, спасибо за ответ.
    Ваш код выдает ошибку – mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
    Буду разбираться дальше сам, еще раз спасибо.
     
  4. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    incomer
    посмотри, что mysql_error() выдаёт
     
  5. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    Unknown column 'comm.id_man_editor' in 'on clause'
     
  6. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    incomer
    ну значит у тебя поля id_man_editor в таблице comm нет, название поля я из твоего вопроса брал
     
  7. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    странно, phpMyAdmin показывает заполненную колонку id_man_editor .
    сделаю работу над ошибками :)

    SDR, спасибо.
     
  8. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    incomer
    а, ясно в чём дело
    вот так попробуй:

    Код (Text):
    1.  
    2. SELECT comm.id, comm.date, comm.text, film.title, man.name, j.name, comm.id_man_editor
    3. FROM comm, film, man
    4. LEFT JOIN
    5. (
    6.     SELECT id, name
    7.     FROM man
    8. ) AS j ON comm.id_man_editor = j.id
    9. WHERE $id = comm.id_org
    10. AND man.id = comm.id_man
    11. AND film.id = comm.id_film
    :)
     
  9. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    это я о своих ошибках :)
     
  10. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    ЭВРИКА )))))))))

    SDR, тебе респект за то, что ты меня правильно думать заставил

    моя работа над ошибками :
    код:

    PHP:
    1. <?php
    2. $sql = "SELECT comm.id, comm.date, comm.text, film.title, man.name, X.name
    3. FROM comm, film, man, man X
    4. WHERE $id = comm.id_org
    5. AND man.id = comm.id_man
    6. AND film.id = comm.id_film
    7. AND X.id = comm.id_man_editor";
    8.  
    9. $query = mysql_query($sql, $db);
    10. $row= mysql_fetch_array ($query);
    11.  
    12. if (!$row) {echo "<b>ошибка ".mysql_errno()."</b>: ".mysql_error();} /*проверка ошибок*/
    13.  
    14. echo "<pre>";
    15. print_r ($row);
    16. echo "</pre>";
    17. ?>
    1)где Х – псевдоним; 2) убрал MYSQL_ASSOC , а то он переписывает значение name.

    Тема закрыта, SDR СПАСИБО!
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Поменяй местами таблицы или сделай RIGHT JOIN тогда исчезнут NULL значения.
     
  12. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    Simpliest
    так и было задумано :)
    я из вопроса просто подумал, что строки где такой фигни нет - тоже нужны (только с пустым значением)

    ...man.name, X.name AS x_name :)
     
  13. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    если $row= mysql_fetch_array ($query) , то:

    Array
    (
    [0] => 1
    [id] => 1
    [1] => 0000-00-00 00:00:00
    [date] => 0000-00-00 00:00:00
    [2] => комментарий
    [text] => комментарий
    [3] => Название фильма
    [title] => Название фильма
    [4] => Иванов
    [name] => Петров
    [5] => Петров

    )
     
  14. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    а если $row= mysql_fetch_array ($query, MYSQL_ASSOC) , то:

    Array
    (
    [id] => 1
    [date] => 0000-00-00 00:00:00
    [text] => комментарий
    [title] => Название фильма
    [name] => Петров
    )
     
  15. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    incomer
    будет
     
  16. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    а куда эту часть кода можно прописать?
     
  17. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    =))))))

    SELECT comm.id, comm.date, comm.text, film.title, man.name, X.name AS x_name
     
  18. incomer

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

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    у меня по данной теме вопросов не осталось, тема точно закрыта.
    всем СПАСИБО.