2017-03-31 3 views
1

Dies ist mein aktueller Code, den ich in einem PHP-Skript verwende.

$prodid = $_GET['id']; 
$query = mysql_query("SELECT * FROM table1 WHERE productid = '$prodid' 
ORDER by amount DESC LIMIT 3"); 

Ich habe das LIMIT als 3 gesetzt Aber ich mag so etwas wie ‚$ count‘ definieren und den Wert für $ count sollte aus einer MySQL-Abfrage dh

$count = mysql_query("SELECT count FROM table1 WHERE productid = '$prodid'"); 

Das LIMIT geholt werden muss sich in Bezug auf den "$ prodid" ändern. So,

mysql_query("SELECT * FROM table1 WHERE productid = '$prodid' 
ORDER by amount DESC LIMIT '$count'"); 
+1

Wird es nicht immer die Anzahl der Datensätze sein, wo productid = x? Wenn count gleich 10 ist und Sie dann dasselbe Abfrage-Limit 10 verwenden, warum überhaupt? Es wird 10 Datensätze geben, wenn Sie das Limit angeben oder nicht. – mkaatman

+2

Als erstes verwenden Sie mysql_ - einen veralteten, unsicheren DB-Handler. Verwenden Sie mysqli_ oder PDO. Zweitens nehmen Sie eine benutzerdefinierte Variable direkt von einer URL und fügen sie in eine Abfrage ein. Verwenden von mysql_query. Möchtest du, dass deine DB gelöscht wird? Lemme illustrieren: https://imgs.xkcd.com/comics/exploits_of_a_mom.png – junkfoodjunkie

+1

'LIMIT '$ count'' => LIMIT $ count'. und stellen Sie sicher, dass es eine ganze Zahl ist. – Qirel

Antwort

1

Ein paar Dinge.

Zuerst, verwenden Sie diese Abfrage, um die Anzahl der abzurufenden Zeilen zu finden.

"SELECT count FROM table1 WHERE productid = '$prodid'" 

Die

"SELECT COUNT(*) FROM table1 WHERE productid = '$prodid'" 

um sagen sollte eine Anzahl von Zeilen zu erhalten.

Und sollte es sagen

"SELECT COUNT(*) FROM table1 WHERE productid = " . intval($prodid) 

zu SQL-Injection (vorausgesetzt, Ihre prodid Werte sind ganze Zahlen) zu vermeiden.

Zweite, gibt die obige Abfrage eine einreihige Ergebnismenge zurück. Sie müssen diese Zeile tatsächlich lesen. Ich werde dir nicht sagen, wie das mit mysql_ zu tun, weil nur ein Idiot mysql_ in diesen Tagen verwendet. Bitte verwenden Sie bitte PDO oder mysqli_.

Dritte, diese Abfrage

"SELECT * FROM table1 WHERE productid = " . intval($prodid) . " ORDER by amount DESC" 

immer die Anzahl der Zeilen zurückgibt Ihre vorherige Abfrage wollte. Daher ist Ihre LIMIT-Klausel in dem von Ihnen angegebenen Beispiel völlig unnötig.

+0

Gut! Wenn count ein Spaltenname in der Tabelle1 ist, gibt es verschiedene count-Werte für jede productid, z. B. für productid = 1, count ist 3 und für procutid = 2 ist der count 6 und ich möchte 3 Ergebnisse holen, wenn $ prodid = 1, ähnlich, 6 Ergebnisse wenn $ prodid = 2. Wie kann es abgefragt werden? – vijay9066