2015-05-13 3 views
0

Что я пытаюсь сделать, это получить отчетливые результаты, используя запрос MYSQL:MYSQL отчетливых результаты запроса

$sql = "SELECT un.*, co.order_product_quantity AS product_num, cu.first_name, cu.surname, cp.product_name, cp.product_thumbnail AS prod_img, co.order_goods_cost, co.order_delivery_cost, co.order_status as status 
     FROM (
      SELECT DISTINCT order_unique_id AS o_id, order_date 
      FROM cbs_orders 
      GROUP BY order_unique_id 
     ) un 
      INNER JOIN cbs_orders co ON co.order_unique_id = un.o_id 
      INNER JOIN cbs_users cu ON cu.id = co.order_user_id 
      INNER JOIN cbs_products cp ON cp.product_id = co.order_product_id 
     ORDER BY un.order_date DESC LIMIT $start_from, $num_rec_per_page "; 

Я ищу, чтобы получить отчетливое order_unique_id из запроса, я никогда не писал запрос первоначально, я думал, что добавление «SELECT DISTINCT order_unique_id» решит проблему, но все равно возвращает дубликаты идентификаторов.

веселит за любую помощь, ребята

Graham

+0

DISTINCT выбирает отдельные строки результатов, а не значения полей. – Uueerdo

+0

концепция вернет различные строки, поэтому вам нужно будет сделать некоторые дополнительные манипуляции. – Fallenreaper

ответ

0

Вы хотите, чтобы правильно использовать GROUP BY; DISTINCT не поможет вам в этой ситуации. Дополнительно, я уверен, что подвыбор не нужен.

Попробуйте

$sql = "SELECT un.order_unique_id AS o_id, un.order_date, 
co.order_product_quantity AS product_num, 
cu.first_name, cu.surname, cp.product_name, 
cp.product_thumbnail AS prod_img, co.order_goods_cost, 
co.order_delivery_cost, co.order_status as status 
    FROM cbs_orders AS un 
    INNER JOIN cbs_orders co ON co.order_unique_id = un.o_id 
    INNER JOIN cbs_users cu ON cu.id = co.order_user_id 
    INNER JOIN cbs_products cp ON cp.product_id = co.order_product_id 
    GROUP BY un.order_unique_id 
    ORDER BY un.order_date DESC 
    LIMIT $start_from, $num_rec_per_page "; 

Это может производить странные результаты, потому что вы не подаете aggregate functions к другим колонкам. Возможно, вам придется использовать их для получения желаемых результатов.

+0

Привет, ребята, если в таблице заказов есть 3 x order_unique_id's 1 в каждой строке, я хотел сначала просто отобразить его один раз, в настоящее время он трижды прокручивается, я не самый большой с запросами, пока я экспериментирую с запросом, мне кажется слишком сложным для меня lol – graham23s

0

Позвольте мне угадать, что вы хотите делать записи только для самого последнего заказа. Если это так, то вы можете сделать то, что вы хотите, должным образом агрегирование данных:

SELECT un.*, co.order_product_quantity AS product_num, cu.first_name, 
     cu.surname, cp.product_name, cp.product_thumbnail AS prod_img, 
     co.order_goods_cost, co.order_delivery_cost, co.order_status as status 
FROM (SELECT order_unique_id AS o_id, max(order_date) as order_date 
     FROM cbs_orders 
     GROUP BY order_unique_id 
    ) un INNER JOIN 
    cbs_orders co 
    ON co.order_unique_id = un.o_id INNER JOIN 
    cbs_users cu 
    ON cu.id = co.order_user_id INNER JOIN 
    cbs_products cp 
    ON cp.product_id = co.order_product_id 
ORDER BY un.order_date DESC 
LIMIT $start_from, $num_rec_per_page; 

Если вы хотите только одну строку в порядке, то вам необходимо выяснить, что делать с продуктами. По-моему, эта интерпретация настолько отличается от вашего текущего вопроса, что вы должны задать другой вопрос, предоставив образцы данных и желаемые результаты.

Смежные вопросы