За последние 24 часа нас посетили 23578 программистов и 1664 робота. Сейчас ищут 855 программистов ...

И снова выборка из базы.

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

  1. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Мое почтение всем ! )


    Такой запрос

    [sql]$sql="SELECT `name`, `style`, `text` FROM `names` INNER JOIN `history` ON `name_id` = `names`.`id` WHERE `page` = '1'"; [/sql]

    Итог выводит из таблицы name только те продукты, для которых существуют значения в таблице history.

    Нужно сделать так, чтобы выводились все пункты из таблицы name. Там где для данного name не существует значения в таблице history - нужно , чтобы значение name выводилось, а из history будет пустота cоотво-о .

    Нужно сделать все в одном запросе. Т.к. работаю сразу с одним массивом.
     
  2. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    [sql]SELECT a.one, a.two, (SELECT b.three FROM second AS b WHERE a.three = b.one) as three
    FROM first AS a
    WHERE #where_clause#
    ORDER BY #order_clause#[/sql]
     
  3. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    а по русски )))

    честно говоря прямо в пустоту.
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  5. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    [sql]$sql="SELECT `name`, `style`, `text` FROM `names` LEFT JOIN `history` ON `name_id` = `names`.`id` WHERE `page` = '1'"; [/sql]

    Выводит то же самое...только то что имеет свзяку. Нужен вывод всего

    Вот так работает

    [sql]$sql="SELECT names.`name`, names.`style`, history.`text` FROM names LEFT JOIN history ON names.`id` = history.`name_id`"; [/sql]

    но надо подвязать еще страницу WHERE `page` = '1'
     
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    WHERE names.page = 1 ?
    или
    WHERE history.page = 1 ?
     
  7. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Dima4321
    Это называется подзапрос (subquery).

    tommyangelo
    Нах там джойн мутить?
    Алиасы же!
     
  8. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    tommyangelo

    только pages в таблице history

    попробывал, но не работает...

    [sql]$sql="SELECT names.`name`, names.`style`, history.`text` FROM names LEFT JOIN history ON names.`id` = history.`name_id` history.page = 1"; [/sql]

    есть еще варианты. ??))
     
  9. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Господа сжальтесь..)) суббота ведь. спать не лягу.)
     
  10. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    если четко через where

    WHERE history.page = 1

    то тогда

    выбирает первые страницы, но зато не выбирает товары, где вообще нет отписания

    [sql] $sql="SELECT names.`name`, names.`style`, history.`text` FROM names LEFT JOIN history ON names.`id` = history.`name_id` WHERE history.page = 1 ";[/sql]

    выьирает только товары с первой страницей, но нужны и товары без страниц.))
     
  11. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Вы уже написали правильный запрос выше, только с ошибкой. Наверняка Вы игнорируете одно из основных правил: проверять ошибки везде, где они могут быть.
    Исправьте Ваш запрос и всё будет работать:
    SELECT names.`name`, names.`style`, history.`text` FROM names
    LEFT JOIN history ON names.`id` = history.`name_id` and history.page = 1"
     
  12. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Chushkin

    Спасибо добрый человек ) Теперь ты мой герой )) И воздастся мне сон сегодня ночью..)

    [sql] $sql="SELECT names.`name`, names.`style`, history.`text` FROM names LEFT JOIN history ON names.`id` = history.`name_id` and history.page = '1' "; [/sql]
     
  13. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    ссори за навязчивость.) Краснею как могу честно ))

    появилась необходимость привязать еще одну таблицу , условие то же.

    tracklist.text
    names.`id`=tracklist.`name_id`






    [sql] $sql="SELECT names.`name`, names.`style`, history.`text`, tracklist.`text` FROM names LEFT JOIN history, tracklist ON names.`id` = history.`name_id`=tracklist.`name_id` and history.page = '1' and tracklist.page='1' ";[/sql]

    Не корректно.

    Пишет

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/t00t/www/site7/public_html/55/admina.php on line 58
     
  14. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Ура нагуглил )

    [sql]$sql="SELECT names.`name`, names.`style`, history.`text`, tracklist.`text_tracklist` FROM names
    LEFT JOIN history ON names.`id` = history.`name_id` and history.page = '1'
    LEFT JOIN tracklist ON names.`id` = tracklist.`name_id` and tracklist.page = '1'"; [/sql]