За последние 24 часа нас посетили 59359 программистов и 1834 робота. Сейчас ищут 1066 программистов ...

Совет по оптимизации запросов к MySQL

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

  1. F1do

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

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Имеется база сообщений вида

    PHP:
    1. message_id
    2. message_from
    3. message_to      
    4. message_text
    При выводе списка мессаг нужно узнавать ник написавшего, соотв.

    [sql]select * from users where user_id = message_from[/sql]

    и потом принтить user_name


    Если мессаг, скажем, 200, то получится дополнительно 200 запросов на каждую.


    Как облегчить задачу?
     
  2. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    читай про JOIN
     
  3. F1do

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

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    а пример можно?
     
  4. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
  5. F1do

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

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    омг сложно-то как!

    а как выводить результаты?
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Да все элементарно.

    Выбрать все сообщения с пользователями:
    [sql]select user, message from messages as mes join users on users.id=mes.from[/sql]

    То есть?
    echo
     
  7. F1do

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

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    элементарно когда разберёшься :)

    имеется:

    таблица users
    [sql]user_id
    user_name[/sql]

    таблица messages
    [sql]message_from
    message_text[/sql]

    соотв запрос

    [sql]SELECT * FROM messages JOIN users ON message_from = user_id[/sql]

    так?

    и как теперь сделать отображение вида

    user_name wrote: message_text

    ?
    заранее спс, не стесняйтесь, пихайте в правильном направлении )
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    F1do
    PHP:
    1.  
    2. <?php
    3. $query = mysql_query (...);
    4. while ($D = mysql_fetch_assoc ($query)){
    5.     $D['user_name'] . ' said: ' . $D['message_text'] . '<br />';
    6. }
    7. ?>
    8.  
     
  9. F1do

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

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    gracias!

    работает, буду изучать дальше :roll:
     
  10. F1do

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

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    из мануала


    [sql]SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
    ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)[/sql]


    можно ли брать данные, к примеру, из t3 по данным, полученным из t2 (в этом же запросе)?