За последние 24 часа нас посетили 56830 программистов и 1750 роботов. Сейчас ищут 766 программистов ...

Помогите составить запрос...

Тема в разделе "PHP и базы данных", создана пользователем lemonl, 12 ноя 2015.

  1. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Помогите составить запрос по выводу значений. Есть таблица:

    [img src=http://saveimg.ru/show-image.php?id=8886377924f808673d5deed0d834712f][/img]
    http://saveimg.ru/show-image.php?id=8886377924f808673d5deed0d834712f

    Под значением 'numbar' = 4 есть дата которая соответствует значениям семи рядам в 'date_sig'
    Нужно вивести все значения 'id' в которых действует правило date_sig=date

    Код (PHP):
    1. SELECT * FROM table1 WHERE date_sig=(SELECT date FROM table1 WHERE date_sig=date) 
    Как-то так...

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Выложи схему базы и данные в SQL, в PHPMyAdmin вкладка экспорт.

    Вот примерный вариант:
    Код (PHP):
    1. SELECT * FROM `table1` WHERE `date_sig` IN (SELECT `date_sig` FROM `table1` WHERE `number` = '4')  
     
  3. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Код (PHP):
    1. CREATE TABLE IF NOT EXISTS `tabled` (
    2.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    3.   `date_sig` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    4.   `numbar` smallint(6) NOT NULL,
    5.   `date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    6.   `numcon` smallint(6) NOT NULL,
    7.   `con` smallint(6) NOT NULL,
    8.   `buzz` smallint(6) NOT NULL,
    9.   PRIMARY KEY (`id`)
    10. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=59 ;
    11.  
    12. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (1, '2015.11.11 03:00:00', 1, '2015.11.11 00:00:00', 11, 35, 8);
    13. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (2, '2015.11.11 03:00:00', 2, '2015.11.11 01:00:00', 28, 35, 5);
    14. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (3, '2015.11.11 03:00:00', 3, '2015.11.11 02:00:00', 28, 35, 5);
    15. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (4, '2015.11.11 03:00:00', 4, '2015.11.11 03:00:00', 14, 35, 5);
    16. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (5, '2015.11.11 03:00:00', 5, '2015.11.11 04:00:00', 28, 35, 5);
    17. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (6, '2015.11.11 03:00:00', 6, '2015.11.11 05:00:00', 28, 35, 5);
    18. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (7, '2015.11.11 03:00:00', 7, '2015.11.11 06:00:00', 28, 35, 5);
    19.  
    20. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (8, '2015.10.09 09:00:00', 1, '2015.10.09 06:00:00', 28, 35, 5);
    21. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (9, '2015.10.09 09:00:00', 2, '2015.10.09 07:00:00', 18, 15, 5);
    22. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (10, '2015.10.09 09:00:00', 3, '2015.10.09 08:00:00', 28, 77, 5);
    23. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (11, '2015.10.09 09:00:00', 4, '2015.10.09 09:00:00', 28, 35, 5);
    24. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (12, '2015.10.09 09:00:00', 5, '2015.10.09 10:00:00', 28, 35, 8);
    25. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (13, '2015.10.09 09:00:00', 6, '2015.10.09 11:00:00', 28, 44, 5);
    26. INSERT INTO `tabled` (`id`, `date_sig`, `numbar`, `date`, `numcon`, `con`, `buzz`) VALUES (14, '2015.10.09 09:00:00', 7, '2015.10.09 12:00:00', 28, 35, 5);
    27.  
    Я думаю можно сделать так, сравнить date_sig=date на существование одинаковой даты. Если дата существует выводим ее... а далее выводим значения где date_sig= этой дате

    одинаковая дата всегда будет когда `number` = '4' ... но это я думаю запросу не поможет
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    date_sig=date тут date это конкретная дата?
     
  5. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Как понять конкретная дата ?
    в date всегда (и под`number` = '4') существует дата =(такая же) как в date_sig
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Он имел в виду вот что: "конкретная дата" это значение типа '2015-10-09 09:00:00', а не поле `date`.

    Как по мне, понятно что у тебя там стоит слово date. Ошибку ты сам указал: для каждого значения date_sig у тебя есть пара в date. Поэтому условие WHERE date_sig=date соответствует ВСЕМ записям в таблице. А ты хочешь получить только записи с конкретным значеним date_sig.

    Ты пытаешся смешать разные случаи.
    1. Если тебе надо вывести все id записей, у которых date_sig равен значению '2015-11-11 03:00:00', то буквально так и пиши:
    Код (PHP):
    1. SELECT id FROM tabled WHERE date_sig='2015-11-11 03:00:00' 
    2. Если тебе надо вывести значения date_sig, которые в принципе встречаются в date (в твоём примере есть две таких группы), то это так:
    Код (PHP):
    1. SELECT t1.`date_sig`, COUNT(*) AS `cnt`
    2. FROM 
    3.   `tabled` AS t1 JOIN 
    4.   `tabled` AS t2 ON t1.`date_sig`=t2.`date`
    5. GROUP BY t1.`date_sig`
    6.  
    3. Можно попытаться вставить условие numbar=4 и найти все записи с совпадающей его датой, но фигня в том, что numbar у тебя не уникален и в твоём примере под такое условие попадут такие date, с которыми совпадут все значения date_sig ))) Опаньки! Поэтому запрос от denis01 нерабочий.

    А вот если мы используем уникальный id=4, то получим одно значение `date` и ему соответствует 7 `date_sig` — как ты хотел. Вот так:
    Код (PHP):
    1. SELECT t1.`id` 
    2. FROM 
    3.   `tabled` AS t1 JOIN
    4.   `tabled` AS t2 ON t2.`date= t1.`date_sig`
    5. WHERE t2.`id` = 4
     
  7. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Если я сделаю такой запрос:
    Код (Text):
    1.  
    2. SELECT id FROM tabled WHERE date_sig=date
    Вывод ''id":
    4
    11
    -------------------------------
    Все правильно и логично потому что date_sig=date
    + сюда нужно еще включить все значения в которых date_sig = '2015-11-11 03:00:00' ( она же "date" )

    Мне нужно вывести "numbar", должно быть так:
    1
    2
    3
    4
    5
    6
    7
    1
    2
    3
    4
    5
    6
    7
    -------------------

    такой запрос не правильный но логика такая:
    Код (Text):
    1.                                               сдесь будет:   2015.11.11 03:00:00 и 2015.10.09 09:00:00      
    2. SELECT * FROM tabled WHERE date_sig    =   (SELECT date FROM tabled WHERE date_sig=date)
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Я ничерта не понял. )))
    Друг, учись формулировать вопросы. В хорошем вопросе половина решения.

    Вот тебе песочница, пробуй: http://sqlfiddle.com/#!9/48165 мне уже жаль потраченного времени