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

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

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

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Здравствуйте, ув. гуру MySQL!

    Есть две таблицы ps_customers и ps_orders

    ps_customer клиенты
    - id_customer

    ps_orders заказы всех клиентов
    - id_order
    - id_customer
    - total_paid

    Нужно сделать такую выборку, чтобы на выходе получилось следующее
    id_customer - SUM(total_paid)

    т.е. Я хочу узнать на сколько в сумме заказал каждый клиент.

    Пробую вот так:
    SELECT ps_customer.id_customer, SUM(ps_orders.total_paid)
    FROM ps_customer
    JOIN ps_orders ON ps_orders.id_customer = ps_customer.id_customer
    WHERE ps_customer.id_customer = ps_orders.id_customer

    Но на выходе имею только одну строчку с суммой по всем заказам всех клиентов, а не каждого в отдельности.

    Подскажите пожалуйста, как выглядит правильный запрос,
    заранее благодарен!
     
  2. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Сделал так
    PHP:
    SELECT ps_customer.id_customerSUM(ps_orders.total_paid)
    FROM ps_customer
    JOIN ps_orders ON ps_orders
    .id_customer ps_customer.id_customer
    WHERE ps_customer
    .id_customer ps_orders.id_customer AND ps_orders.valid=1
    GROUP BY ps_customer
    .id_customer
     
  3. хамзин

    хамзин New Member

    Joined:
    24 Dec 2011
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    и снова нужна ваша помошь.
    вот простой пример авторизации (скачал, т. к. в MySQL новичек)
    PHP:
        $login $_POST['login']; 
        
    $password md5($_POST['password']);
        
    $query mysql_query("SELECT * FROM `users`  WHERE `login`='$login' AND `password`='$password'");
        
    $row mysql_num_rows($query);  
        if(
    $row 0){  
            echo 
    "Вы успешно авторизовались!";  
            }else{  
            echo 
    "Неправильный логин или пароль!";
            }  
        
    база данных users c 5 столбцами (id,login,password,icq,ip)

    как сделать так чтобы когда пользователь введетлогин и пароль свои то открывалась новая страница с номером его icq.
    типа: здравствуйте (login) ваш icq (номер его icq из базы)

    вытащить вроде бы понятно SELECT 'icq' FROM users WHERE login = '$login';
    но с авторизацией непонятно что.
     
    #1603 хамзин, 23 Jan 2012
    Last edited: 23 Jan 2012
  4. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,986
    Likes Received:
    879
    Reputations:
    198
    Вместо строки где "Вы успешно авторизовались".
    PHP:
    echo 'привет '.$row['login'].' ваша асику:'.$row['icq'];
    ЗЫ в вашем скрипте уязвимость, читайте:
    http://php.net/manual/ru/function.mysql-real-escape-string.php
    http://php.net/manual/ru/function.htmlspecialchars.php
     
    _________________________
  5. хамзин

    хамзин New Member

    Joined:
    24 Dec 2011
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    так не работает.
    через SQL запрос все получается нормально
    SELECT `icq` FROM `users` WHERE `login` = 'zxczxc'
    но через php непойму как сделать. пытаюсь как то так
    PHP:
    $login $_POST['login'];
    $ffff =  mysql_query("SELECT `icq` FROM `users` WHERE  `login` = '$login'");
    echo 
    "Ваш логин $login. Bаш icq: $ffff";  
    в чем ошибки?
     
  6. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,508
    Likes Received:
    389
    Reputations:
    101
    mysql_fetch_XXX, потом уже echo. Маны-то читать надо.
     
  7. хамзин

    хамзин New Member

    Joined:
    24 Dec 2011
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    может просто 1 раз покажешь куда вставить эту mysql_fetch_XXX чем 5 раз обьяснять что, куда, зачем и почему.
     
  8. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,508
    Likes Received:
    389
    Reputations:
    101
    например
    PHP:
    $login mysql_real_escape_string ((string) $_POST['login']);
    $ffff =  mysql_query ("SELECT `icq` FROM `users` WHERE `login` = '$login' LIMIT 0, 1");
    if ( ! 
    $ffff)
      die (
    'mysql_query() error');
    $row mysql_fetch_row ($ffff);
    echo 
    'Ваш логин 'htmlspecialchars ($loginENT_QUOTES), '. Bаш icq: '$row[0];
     
  9. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    720
    Likes Received:
    205
    Reputations:
    -26
    Есть 2 столбца: test1, test2
    В test1 - Не уникальная md5 сумма, очень много повторов
    В test2 - Числа ~10-1000

    Как вывести все строки у которых одинаковый test1 (md5), но разный test2. + еще сколько строк содержат аналогичный test1 и test2
     
  10. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,777
    Likes Received:
    848
    Reputations:
    857
    Не тестировал, попробуй

    Code:
    select test2,test1 from table where 1<(select count(test1) from table group by test1)
    
    select  test1,count(test1) from table group by test1
    
    
    Возможно, ошибаюсь, тк некогда проверять.
     
    _________________________
  11. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    720
    Likes Received:
    205
    Reputations:
    -26
    Не работает, забыл уточнить что test2 то же не уникальна и содержит повторы. Таблица 2,5кк записей, 1,2гб
     
  12. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    328
    Likes Received:
    591
    Reputations:
    764
    М.б.
    Code:
    SELECT a.* FROM table a 
     inner join (select test1 from table group by test1 having count(test1)>1)b 
      on a.test1=b.test1 
      order by test1
     
    #1612 nikp, 29 Jan 2012
    Last edited: 29 Jan 2012
  13. barnaki

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

    Joined:
    2 Nov 2008
    Messages:
    673
    Likes Received:
    125
    Reputations:
    4
    интересная задача

    1. Задание № 1.

    Вводные данные: Есть таблица со статистикой регистраций:
    CREATE TABLE `regs` (
    `user_id` int(11) NOT NULL default '0',
    `login` varchar(50) NOT NULL default '',
    `reg_date` datetime NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY (`user_id`),
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8

    Задание: Необходимо вывести количество регистраций за каждые 10 минут с 2009-09-21 до 2009-09-23. Быстро. Красота не нужна, только правильные данные. Результаты нужны только один раз.
    решить за 1 sql запрос
     
  14. namak

    namak Member

    Joined:
    29 Jan 2009
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    на чем лучше начать изучать хранилища, oracle или mssql?
     
  15. barnaki

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

    Joined:
    2 Nov 2008
    Messages:
    673
    Likes Received:
    125
    Reputations:
    4
    mysql -u имя пользвателя -p( и вводишь пароль пользователя под которым заходишь)
     
  16. jecka3000

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

    Joined:
    15 Mar 2008
    Messages:
    372
    Likes Received:
    54
    Reputations:
    4
    ребят помогите с задачей:

    условие:

    имеется таблица с 1 полем, заполненная числами по порядку: {1,2,4,7,8,11..}.
    Написать SQL Запрос который делает выборку следующего вида (2 столбца): {{3,1},{9,2},...}, Т.е. в первом поле идет число с которого начинается пропуск, во втором количество пропущенных чисел;

    Желательно использование оператора Select и без сильных наворотов, т.к. это только начало курса.

    Если можно с объяснениями=)

    Спасибо)
     
  17. TweakeR

    TweakeR Member

    Joined:
    6 Feb 2006
    Messages:
    57
    Likes Received:
    8
    Reputations:
    5
    здравствуйте!
    Имеется запрос:
    Code:
    SELECT COUNT(*) as `count` FROM `tb1` WHERE  (`date` BETWEEN '2012-02-10' AND '2012-02-12') GROUP BY `date` ORDER BY date DESC";
    В результате получается:

    2012-02-10 - 10
    2012-02-11 - 5
    2012-02-12 - 7

    Подскажите пожалуйста как можно составить так запрос если имеется колонка "st" (которая может принимать значения: ok, not_ok, wait) чтобы на выходе было примерно такое:

    date - all_count - ok_count - not_ok_count - wait_count
    2012-02-10 - 10 - 1 - 5 - 4
    2012-02-11 - 5 - 1 -2 - 3
    2012-02-12 - 7 - 2 - 3 - 2

    :confused:
     
    #1617 TweakeR, 12 Feb 2012
    Last edited: 12 Feb 2012
  18. TweakeR

    TweakeR Member

    Joined:
    6 Feb 2006
    Messages:
    57
    Likes Received:
    8
    Reputations:
    5
    Нашел ответ на свой вопрос! кому может пригодится:
    PHP:
    SELECT DATE( `date` ) AS `date2` , COUNT( * ) AS `all` , sum( `status` = 'accepted' OR `status` = 'wait' ) AS waitsum( `status` = 'delivered' ) AS oksum( `status` = 'failed' ) AS not_ok FROM `tb1WHERE ( `dateBETWEEN '2012-02-11 00:00:00' AND '2012-02-12 23:59:59' GROUP BY `date2ORDER BY DATE( `date` ) DESC LIMIT 0 30
     
  19. good.god

    good.god Member

    Joined:
    23 Nov 2009
    Messages:
    282
    Likes Received:
    33
    Reputations:
    0
    Всем доброгов ремени суток, не силен в sql, но очень надо. Такая проблема, не вставляется в поля ip, http_refferer и create_date. Ну т.е. вот такая вот ошибочка у меня вылетает:
    insert into tbl ( ip, http_referer, create_date ) values ( '127.0.0.1', '', NOW() ).
    Я грешу на то, что у меня выставлен неправильно тип данных, для ip я поставил longtext, для http_referer - text и для create_date - datetime.
     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    good.god Покажите текст ошибки
     
    _________________________
Loading...
Thread Status:
Not open for further replies.