[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    SELECT `login`, `pole1`, `pole2`, `pole3`, max(`time`) AS `time` ...

    Не работает?
     
  2. ZloiKombat

    ZloiKombat Banned

    Joined:
    16 Jan 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Не работает так :(
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ZloiKombat SELECT `login`, `pole1`, `pole2`, `pole3`, max(`time`) AS `tm` FROM `tabl` GROUP BY `login` ORDER BY `tm` DESC

    Что именно не работает? Не возвращает записи вообще, или возвращает, но уже не те?
     
    _________________________
  4. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    подозреваю, что он так и пишет pole1, pole2, pol3 ... а не те, которые у него в таблице
     
  5. ZloiKombat

    ZloiKombat Banned

    Joined:
    16 Jan 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Выводит но все в хаотичном порядке, сбивается вся сортировка
    P.S LStr1ke не ищи глупей себя
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ZloiKombat мой вариант должен правильно сортировать. В исходном запросе - сортировка идет по номеру столбца, пытаясь вставить колонки раньше него - сортировка как раз и сбивается. Если все же не работает, то пробуйте так:

    SELECT `login`, max(`time`) AS `time`, `pole1`, `pole2`, `pole3` FROM `tabl` GROUP BY `login` ORDER BY 2 DESC

    Вы сюда пришли за помощью, и с ходу пытаетесь испортить к себе отношение. Не советую так делать
     
    _________________________
  7. ZloiKombat

    ZloiKombat Banned

    Joined:
    16 Jan 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Так выводит, но другие поля в хаотичном порядке.
    То есть, все выводит правильно, но при бобавлении ного поля на вывод (как в вашем примере) вывод значения этих полей идет не тот, который принадлежит выводимым строкам.

    P.S Человек который указывает на мой низкий уровень (если опираться на сообщение, то это даже не низкий а вообще никакой) не имея представления о моем реальном уровне знаний, первоначально уже портит настроение. Прежде чем кому то указать на уровень его знаний, нужно иметь представление о этих знаниях
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ZloiKombat попробуйте так, со знаком могу ошибиться:
    Code:
    select t1.`login`, t1.`time`, t1.`pole1`, t1.`pole2` FROM Tabl t1 LEFT JOIN Tabl t2 ON t1.`login` = t2.`login` AND t1.`time`<t2.`time` WHERE t2.`login` IS NULL;
    http://www.yakimchuk.ru/questions.htm#keepcool

    Если Вы посмотрите внимательно, о ваших знаниях или незнании - не было сказано ни слова
     
    _________________________
  9. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Code:
    SELECT COUNT(`likes`.`id`) AS `like`,`text`.`id`,`text`.`content`
     LEFT JOIN `likes` ON `likes`.`lid` = `text`.`id`
    WHERE 1
    Если в табле text нету записей ответ всёравно будет изза COUNT ,как это отменить?
    Тоесть если записи есть то считать а если нету то выдавать пустой результат тоесть НИЧЕГО?

    зарание спасибо!
     
  10. HBWS

    HBWS Member

    Joined:
    26 Nov 2010
    Messages:
    226
    Likes Received:
    22
    Reputations:
    0
    Спасибо, помогло
     
  11. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    328
    Likes Received:
    591
    Reputations:
    764
    В названии поля лучше не использовать `like`

    Code:
    SELECT COUNT(`likes`.`id`) AS kol,`text`.`id`,`text`.`content`
     LEFT JOIN `likes` ON `likes`.`lid` = `text`.`id`
    HAVING kol>0
     
    #1351 nikp, 20 Feb 2011
    Last edited: 20 Feb 2011
  12. gibson

    gibson Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    не только like, но desc, asc и etc
     
  13. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Есть таблица. в ней стоит запрет на наличие дублей в пределах поля проект.
    тоесть не может быть 2 одинаковые записи с одинаковым значением в колонке login и proekt
    Добавляю записи с использованием IGNOR , а вот при обновлении (переноме логина с одного проекта в другой ошибка)

    запрос:
    UPDATE base SET proekt='$_POST[sel_move]' WHERE proekt='$idr'

    ошибка

    Duplicate entry 'login1' for key 2


    Как избежать и просто проигнорировать уже имеющиеся записи?
     
  14. mixlion

    mixlion New Member

    Joined:
    18 Apr 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Как реализовать
    SELECT * FROM `table` ORDER BY `pole1`
    UNION
    (SELECT * FROM `table2` ORDER BY `pole2`)
    ORDER BY `pole3`
    То есть данные из первой таблицы отсортировать по `pole1` , из второй по `pole2` а потом их всех вместе по `pole3`
    `pole3` общее для обоих таблиц, а `pole1` только у первой таблицы, `pole2` только у второй
     
  15. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Code:
    CREATE TABLE `content_type_skin` (
      `nid` int(11) default NULL,
      `field_path_value` varchar(255) default NULL,
      `content_type_skin` varchar(255) default NULL,
      `field_use_value` varchar(255) default NULL,
      `field_channel_value` varchar(255) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    есть такой запрос
    SELECT c.nid FROM content_type_skin c WHERE c.field_path_value='nablya' UNION SELECT c.nid FROM content_type_skin c WHERE c.field_path_value='nasuka' ORDER BY c.field_path_value DESC
    Code:
    Unknown column 'c.field_path_value' in 'order clause'

    SELECT c.nid FROM content_type_skin c WHERE c.field_path_value='nablya' UNION SELECT c.nid FROM content_type_skin c WHERE c.field_path_value='nasuka'
    работает


    SELECT c.nid FROM content_type_skin c WHERE c.field_path_value='nasuka' ORDER BY c.field_path_value DESC
    работает


    в чём проблема в 1м запросе :eek:
     
  16. red_joker

    red_joker New Member

    Joined:
    4 Nov 2010
    Messages:
    31
    Likes Received:
    3
    Reputations:
    0
    Столкнулся недавно с похожей проблемой с алиасами в UNION.
    Из доки мускула по UNION:
    И там же есть про проблемы с алиасами таблиц:
    Исходя из этого, лучше отказаться от алиасов таблиц и дополнительно выбрать поле с алиасом, по которому ORDER BY + взять отдельные селекты в скобки. Если нужно отсортировать все выбранное в 2х селектах, примерно так :
    Code:
    (SELECT nid, field_path_value  AS ordered FROM content_type_skin 
      WHERE field_path_value='nablya') 
    UNION (SELECT nid, field_path_value FROM content_type_skin 
      WHERE field_path_value='nasuka') ORDER BY ordered DESC
    На работоспособность не проверял.
    А зачем вообще делать UNION селектов из одной и той же таблицы? Не проще выбрать все одним запросом WHERE field_path_value IN ('nasuka', 'nablya') ORDER BY field_path_value DESC ?
     
    1 person likes this.
  17. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Посоветуйте как объеденить 2 таблицы accounts они идентичны структурой, но заполнены разными акаунтами, общее у них только колонка id, вообщем нужно из первой таблицы взять все колонки кроме ID и вставить в вторую таблицу присвоив новым акаунтам новые ID (колонка ID автоинкремент)
     
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    b3
    Code:
    INSERT INTO `tabl2` (`col1`, `col2`) SELECT `col1`, `col2` FROM `tabl1`
     
    _________________________
  19. cepera666

    cepera666 New Member

    Joined:
    22 Jan 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    привет! вопрос, наверное, тупой, но с sql работаю недавно, не освоился еще, но уже надо)
    в общем, допустим, есть Таблицы A, B, C.
    B и C связаны по Id: например, С.C_ID, B.C_ID
    A и C связаны по Id: A.A_ID, C.A_ID
    можно посчитать сумму для конкретного ID:

    Code:
    SELECT Sum(B.Quantity) AS tbl1 FROM B, C
    WHERE ( (С.C_ID=B.C_ID) AND (С.C_ID=219450958) );
    
    а теперь, допустим, мне нужно вывести отдельно сумму для каждого ID:

    Code:
    SELECT C.description, C.Quantity,
    (Sum(B.Quantity) AS tbl1  FROM B, C WHERE ( (С.C_ID=B.C_ID) AND (С.C_ID=219030958)) ) AS tbl1
    FROM A INNER JOIN С ON A.[A_ID] = C.[A_ID]
    
    что в последнем случае нужно написать вместо (С.C_ID=219030958) ? ведь такая конструкция (С.C_ID=B.C_ID) будет означать нечто другое, а мне нужно уже конкретное значение.

    спасибо!
     
  20. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    GROUP BY
     
Thread Status:
Not open for further replies.