За последние 24 часа нас посетили 18447 программистов и 1716 роботов. Сейчас ищут 1103 программиста ...

помогите с запросом

Тема в разделе "PHP для новичков", создана пользователем amf1k, 3 сен 2015.

  1. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    Есть таблица, поля:
    id - 1 key - 100
    id - 4 key - 100
    id - 9 key - 100
    Зашли на страницу 4, нужно вывести остальные id ( в нашем случаи 1,9 ) где поле key=100, как это реализовать одним запросом???
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    если ты при заходе на страницу 4 не знаешь key т.е. только после его получения ты начинаешь получение всех записей с key=100 тогда нет.
     
  3. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    беда( тогда буду печатать 2 запроса(

    Добавлено спустя 8 минут 23 секунды:
    А если так замутить???
    SELECT * FROM `table` WHERE `id` != 4 AND `key` = (SELECT `key` FROM `table` WHERE `id` = 4)
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    такая хрень называется рекурсивный запрос (по аналогу рекурсии в программировании) MySQL его не поддерживает, другие БД - да, если мне не изменяет память - MS SQL.

    Добавлено спустя 18 минут 49 секунд:
    в свое время я выяснял подобное, нельзя, хотя это решало бы много проблем.
     
  5. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    Не верю!) блин, сейчас нет возможности проверить запрос, сижу с телефона! Днем отпишу результат)
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    amf1k, можно это дело решить подзапросом.
     
  7. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    Вот еще намутил:
    SELECT `t1`.`id` FROM `table` `t1`
    INNER JOIN `table` `t2` ON (`t1`.`key` = `t2`.`key` AND `t1`.`id` <> 4)
    WHERE `t2`.`id` = 4
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я тоже за подзапрос
     
  9. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    Мне кажется, что JOIN будет работать быстрее???
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код (Text):
    1. SELECT * FROM `table` WHERE `key` IN (SELECT `key` FROM `table` WHERE id=4)
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.125
    Симпатии:
    1.246
    Адрес:
    там-сям
    т.к. id уникален, ваш подзапрос вернет одну строку. значит можно указать = вместо без IN()
    Код (Text):
    1. SELECT `id`
    2. FROM `mytable`
    3. WHERE `key` = (SELECT `key` FROM `mytable` WHERE `id` = 4)
    или
    Код (Text):
    1. SELECT y.`id`
    2. FROM `mytable` AS x, `mytable` AS y
    3. WHERE x.`id` = 4 AND y.`key` = x.`key`
    или
    Код (Text):
    1. SELECT y.`id`
    2. FROM
    3.   `mytable` AS x JOIN
    4.   `mytable` AS y ON y.`key`=x.`key`
    5. WHERE x.`id` = 4
    лично мне последний вариант больше нравится.
     
  12. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    В последнем варианте мне кажется всётаки надо INNER JOIN написать
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.125
    Симпатии:
    1.246
    Адрес:
    там-сям
    это одно и то же

    Добавлено спустя 1 минуту 58 секунд:
    цитируй только то, что комментируешь.