/ / PHP के माध्यम से गतिशील SQL स्टेटमेंट द्वारा ORDER - php, sql, ऑर्डर, sql-order-by

PHP के माध्यम से गतिशील SQL कथन द्वारा आदेश - php, sql, ऑर्डर, sql-order-by

मेरे पास एक PHP स्क्रिप्ट है, जो HTML फॉर्म से मान प्राप्त कर रही है, और फिर इसमें से SQL स्टेटमेंट बनाता है।

सब कुछ ठीक काम करता है, इस तथ्य के बावजूद कि मैं जोड़ना चाहता हूं ORDER BY साथ ही चेक बॉक्स भी। यह HTML रूप में सब ठीक है, लेकिन जब यह एसक्यूएल स्टेटमेंट बनाने की बात आती है, तो मैं इसे काम नहीं कर सकता।

मेरे नाम के कॉलम हैं col1, col2, ... ,col5 बयान

... ORDER BY x, y, z, i, j;

इस तरह काम कर रहा है: अगर चेकबॉक्स के लिए col1 है checked फिर x = col1 और बाकी के लिए यह वही है। क्या काम नहीं करता है, जब मैं कुछ बक्से की जांच नहीं करता हूं - उदाहरण के लिए मैं केवल col1 और col4 द्वारा ORDER करना चाहता हूं, इसलिए मैं उन दोनों की जांच करता हूं, और बयान का उत्पादन

ORDERY BY col1, y, z, col4, j

लेकिन मैं यह भी जाँच रहा हूँ कि क्या एक चेकबॉक्स col1 है empty, और यदि यह है, तो इसका मूल्य बदल रहा है x सेवा मेरे और यहाँ मैं "मैं कर रहा हूँ बताते हुए" अंदर डालने की कोशिश की 1=1, NULL, col1 जब भी कोई चेकबॉक्स चेक नहीं किया जाता है (और बाकी के लिए यह वही है y,z,i,j)।

तो मुझे जिस चीज की आवश्यकता है, वह यह है कि बयान को काम करने के लिए कुछ चतुर तरीका है।

जब मैंने सभी मूल्यों को बदल दिया x, ..., j जब भी कोई डिब्बा खाली होता था 1=1 बयान केवल के लिए काम किया 1 बॉक्स की जाँच की, लेकिन जब मैंने 2 की जाँच की - यह उनके द्वारा आदेश नहीं था

उत्तर:

उत्तर № 1 के लिए 1

यदि संबंधित चेक बॉक्स की जाँच नहीं की जाती है तो आप केवल एक कॉलम को पूरी तरह से बाहर क्यों नहीं छोड़ते हैं?

$sql = "SELECT * FROM table";
$ordercolumns = array();
if (isset($_POST["col1"])) {
$ordercolumns[] = "x";
}
...
if (isset($_POST["col5")) {
$ordercolumns[] = "j";
}
if (sizeof($ordercolumns) > 0) {
$sql .= " ORDER BY " . implode(",", $ordercolumns);
}