2015-12-18 10 views
5

To jest mój skrypt php, który wybiera wszystko z fakturyNo gdzie invoiceNo jest odrębny.Jak uzyskać dostęp do określonej wartości z bazy danych mysql za pomocą php?

<?php 

require 'init.php'; 
$query = 'SELECT * FROM `selected_items` WHERE invoiceNo IN (SELECT DISTINCT (invoiceNo) AS invoiceNo FROM selected_items) GROUP BY invoiceNo;'; 
$res = mysqli_query($con, $query); 
$result = []; 
while ($row = mysqli_fetch_array($res)) { 
    array_push($result, [ 
     'custInfo' => $row[0], 
     'invoiceNo' => $row[1], 
     'barcode'  => $row[2], 
     'description' => $row[3], 
     'weight'  => $row[4], 
     'rate'  => $row[5], 
     'makingAmt' => $row[6], 
     'net_rate' => $row[7], 
     'itemTotal' => $row[8], 
     'vat'   => $row[9], 
     'sum_total' => $row[10], 
     'bill_type' => $row[11], 
     'date'  => $row[12], 
     'advance'  => $row[13], 
     'balance'  => $row[14], 
    ]); 
} 
echo json_encode(['result' => $result]); 
mysqli_close($con); 

enter image description here

Teraz ten skrypt daje mi pierwszą wartość z sum_total czyli daje mi pierwszy wiersz z mojej bazy danych, jak mogę dostać ostatnie row.I jestem nowy w programowaniu jakieś sugestie lub pomoc jest appreciated.Thanks :)

+0

dlaczego nie można używać do sortowania 'DESC' ? –

+0

@AjayMakwana możesz podać przykład. Dzięki :) –

+0

Myślę, że chcesz max sum_total z unikalnej faktury prawda? czy chcesz wszystkie faktury z tym lub tylko sortować według desc sum_total – rahul

Odpowiedz

2
Select * From (
SELECT t.*, 
     @rownum := @rownum + 1 AS rank 
    FROM selected_items t, 
     (SELECT @rownum := 0) r order by rank DESC 
) si GROUP BY si.invoiceNo; 

To zapytanie rozwiązać mój problem

0

spróbować tak:

$query ="SELECT * FROM `selected_items` WHERE invoiceNo IN (SELECT DISTINCT (invoiceNo) AS invoiceNo FROM selected_items) ORDER BY `sum_total` DESC"; 
$query ="SELECT max(`sum_total`) FROM selected_items"; 

Gdzie column_name mogą być różne.

+0

To daje taki sam wynik, że nadal otrzymuję pierwszy wiersz –

+0

wypróbuj drugie zapytanie. –

+0

@AjayMakwana Twoje drugie zapytanie da tylko jeden rekord – rahul

0

Spróbuj to, myślę, że to chcesz, może to pomóc

$query ="SELECT max(`sum_total`) FROM `selected_items` GROUP BY invoiceNo;"; 
+0

w przeciwnym razie możesz zmodyfikować to na swoje wymagania lub powiedzieć mi, co dokładnie chcesz – rahul

+0

Rahul, ale także chcesz wszystkie wartości z tego rzędu.Nie mogę po prostu uzyskać ostatni wiersz dla tej konkretnej faktury. Dzięki :) –

+0

tak, po prostu dodaj wybrane wartości przecinkiem po max ("sum_total"), przyklad_field od ..... – rahul

0

Jeśli chcesz uzyskać tylko ostatni rekord limitu użytkowego.

$query ="SELECT * FROM `selected_items` GROUP BY invoiceNo ORDER BY `sum_total` DESC limit 1; 

Jeśli trzeba uzyskać najwyższej do najniższej rekordu sum_total wypróbować poniższy kod,

$query ="SELECT * FROM `selected_items` where `sum_total` = (SELECT max(`sum_total`) FROM `selected_items` GROUP BY invoiceNo) GROUP BY invoiceNo ORDER BY `sum_total` DESC; 
+0

Dzięki Arun Próbowałem obu rozwiązań, pierwszy nadal daje mi pierwszy wiersz. A drugi daje błąd mówiąc 1064 - Masz błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu 'DESC LIMIT 0, 30' w linii 1 –

+0

Nie udało mi się dodać 'sum_total' dla porządku według 2. zapytania. Teraz to edytowałem. Ok. Muszę jasno powiedzieć jedno: Czy chcesz mieć wszystkie rekordy z unikalną fakturąNie lub Ostatnim rekordem? – Arun

+0

Chcę ostateczny rekord unikalnej fakturyNo. –

Powiązane problemy