在MySQL连接查询中添加序列号

问题描述 投票:0回答:3

我看到很多答案将序列号添加到一个简单的表中,但在这里我想将串行密钥添加到连接查询中。我试过这个查询

SELECT  *,@c:=@c+1 AS serialNumber 
FROM 
(SELECT @c:= 0) AS c,
(
  SELECT a.ai_id,a.ai_images,a.user_id,a.ai_like_count,a.ai_comment_count,a.ai_caption,u.display_name,u.first_name,u.email,a.ai_created 
  FROM album_images AS a 
  LEFT JOIN users AS u 
  ON a.user_id=u.user_id 
  WHERE u.email_validation=1 
  AND u.status=1 
  ORDER BY a.ai_created DESC
) AS t 
WHERE 1 
GROUP BY user_id 
ORDER BY ai_created DESC

但是我没有按照正确的顺序得到数字,就像这样的1,5,8。我希望它像这个1,2,3,4

mysql
3个回答
0
投票

试试这个查询

 set @c=0;
 SELECT @c:=@c+1 AS serialNumber,tab.* 
 FROM (
 SELECT * FROM
  (
   SELECT     a.ai_id,a.ai_images,a.user_id,a.ai_like_count,a.ai_comment_count,a.ai_caption,u.display_name,u.first_name,u.email,a.ai_created 
   FROM album_images AS a 
   LEFT JOIN users AS u ON a.user_id=u.user_id 
   WHERE u.email_validation=1 AND u.status=1 ORDER BY a.ai_created DESC) AS t GROUP BY user_id ORDER BY ai_created DESC
) AS tab

1
投票

在分配序列号后,您将订购ai_created的结果集,这会导致问题。在内部查询中使用排序。这是一个例子:

SELECT  *,@c:=@c+1 AS serialNumber 
    FROM 
    (SELECT @c:= 0) AS c,
    (
      SELECT a.ai_id,a.ai_images,a.user_id,a.ai_like_count,a.ai_comment_count,a.ai_caption,u.display_name,u.first_name,u.email,a.ai_created 
      FROM album_images AS a 
      LEFT JOIN users AS u 
      ON a.user_id=u.user_id 
      WHERE u.email_validation=1 
      AND u.status=1 
      GROUP BY a.user_id 
      ORDER BY a.ai_created DESC
    ) AS t 

0
投票

可以使用UNION操作将序列号(SL)添加到Query中。以下是KOHA ILS报告的示例:

enter code here:  SELECT  @c:=@c+1 AS 'SL' , t.* 
FROM 
(SELECT @c:= 0 AS cc) AS c,
(
SELECT biblio.biblionumber AS BiblioNumber,
GROUP_CONCAT(items.barcode  ORDER BY items.barcode SEPARATOR ',\r\n') AS 'Accession #', 
biblio.title AS Title, 
biblio.author AS 'Main Author',  
COUNT(items.barcode) AS Qty, 
SUM(items.price) AS 'Price (Tk.)', 
@bill_number :=items.stocknumber AS 'Bill No.' FROM biblio LEFT JOIN items ON ( biblio.biblionumber = items.biblionumber ) 
WHERE 
items.stocknumber =  <<Bill Number>>
GROUP BY biblio.biblionumber
) AS t UNION 
SELECT '','','','','','<b>Grand Total:</b>', SUM(items.price),'' FROM items WHERE items.stocknumber LIKE @bill_number GROUP BY items.stocknumber UNION SELECT '','','','','','<b>Net Payable Amount:</b>', @grand_total:=SUM(items.price),'' FROM items WHERE items.stocknumber LIKE @bill_number  GROUP BY items.stocknumber UNION SELECT '','','<b>Amount Chargeable:</b>', CONCAT("<b>(In Word)"," Tk. ", number_to_words(@grand_total),"Only </b>"),'', '', '',''  UNION
SELECT '','','<b>Print Date-Time:</b>', CONCAT("<b>",NOW(),"</b>"),'', '', '','';
© www.soinside.com 2019 - 2024. All rights reserved.