За последние 24 часа нас посетили 17485 программистов и 1721 робот. Сейчас ищут 1563 программиста ...

LEFT JOIN + LIMIT

Тема в разделе "PHP и базы данных", создана пользователем Vah, 22 июл 2006.

  1. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    Дано:
    2 таблицы
    1) orders (id INT auto_increment, date INT (10), status INT(2))
    2) orders_positions(id INT auto_increment, order_id INT, name VARCHAR(128), price)

    Допустим есть 3 записи в таблице orders (3 заказа)
    в каждом заказе по 5 наименований продукции т.е. в таблице orders_positions 15 рядов

    Хочу вывести все наименования на одной странице... роуспаном объединяя позиции в одном заказе.... Делаю запрос
    SELECT a.*, b.* FROM orders AS a LEFT JOIN orders_positions AS b ON (a.id=b.order_id)

    получаю "балясину" из 15 строк......

    Теперь хочу сделать чтоб если в таблице orders (!!!) больше 10 рядов - выводить по 10 заказов (!!! НЕ НАИМЕНОВАНИЙ) на страницу....
    т.е. строк может быть 10, 15, 98 - неважно...... надо сделать лимит по первой таблице, а не рез-тату получившемосю после склеивания......

    Ну и соответственно хочу сделать это 1 запросом........ Ну можно субкваери ещё в него..... суть в том, чтоб у меня в коде получилась одна строка $sql="что-то".....
     
  2. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    ... ORDER BY row LIMIT ...
     
  3. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    ну и выдаст он тебе все тоже самое, только отсортированное.....

    есть 15 рядов в таблице orders и 998 рядов в таблице orders_positions...

    К 1-м десяти рядам относится допустим 567 полей...... так вот LIMIT тогда должен быть равен 567 или 10 но тогда надо лимитировать по первой таблице.....

    если бы все так просто было... =)
     
  4. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    если заказов больше 10 позиции выводить вообще надо?
     
  5. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    зачем мне выбирать лишние пару сотен позиций??
     
  6. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    можно конечно сделать 2-мя запросами..... сначала выбрать 10 ИДов и вписать их во 2-й запрос.....
    но вот интереснее в 1 запрос...... кстать MySQL 5-й версии....
     
  7. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    напишите 2 запроса, мб тогда будет проще вьехать

    кстать 4-й хренова с подзапросами работал
    как с этим в 5-м?

    SELECT ... WHERE id IN (SELECT ...)
     
  8. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    LIMIT в подзапросах IN/ALL/ANY/SOME не понимает..... но впринципе в сравнении с 4-м получше будит......

    там самое вкусное - stored procedures...... ну триггеры ещё в 4.1 ввели....

    Сделал в 2 запроса....
    потом напишу хранимую процедуру чтоб можно было просто ее вызввать делать.....