PHP / MySQL: Bir dizide bir dizi ve elde sonuçları MySQL ile sorgulama

0 Cevap php

Ben bir dizi, $ taramaları var. Ben o dizideki tüm değerleri ile MySQL sorgulamak ve geri bir dizide benim sonuçlar almak istiyorum. Örneğin, taramaları örnek veri olacaktır:

E1234
E2244
E3654

MYSQL tablo PARTS alanları vardır part, size, length, plate, side, type.

Ben bu bölümü, 1 vb uzunluğu olmak için boy sonucu olarak $output["E1234"][0] ile bitirmek istiyorum ve ben dizi MYSQL sorgu sıralanabilir olmak istiyorum. (SIDE desc, PLATE asc tarafindan).

Sağ şimdi, ben sadece $SCANS dizi üzerinden atlama ve sorgudan sonra sorgu yapıyor, ama sonra sıralama tüm sonuçları düzgün mümkün değildir dilerim.

Bu mümkün mü? Bu ben şimdi ne yapıyorum, ama her sorgu sonra çıkılır bir satır döndürür açıkça, hiçbir sortability var. Ben, bir sorgu gerçekleştirmek mümkün olacak dizi içindeki sonuçlarını sıralamak ve daha sonra çıktı istediğiniz sıralamak sonra veri.

    foreach ($scans as $currentscan) {
        $partselect = substr(mysql_real_escape_string($currentscan), 0, 5);

        $query = "SELECT french, length, plate, side, type FROM parts WHERE part = '$partselect' ORDER BY side DESC, plate ASC LIMIT 1";
        $result = mysql_query($query);
        #echo 'query is '.$query.'   <br>';
        $error = mysql_error();
        $num_rows = mysql_num_rows($result);
        if ($num_rows == 0) {
            echo 'BAD PART: '.$currentscan.' '.$partselect.' error is '.$error.'<br \>
            ';
        } else {
            $row = mysql_fetch_array($result);
            print $partselect.' is a '.$row['french'].'/'.$row['length'].' - '.$row['type'].' - '.$row['plate'].'('.$row['side'].')<br \>';
        }
    };

EDIT: şimdi burada bazı önerileri aşağıdaki gibi bu kodu:

$scans = explode("\n",$_POST['scans']);

foreach ($scans as $currentscan) {
   if ($currentscan[0] == "E") { //this is a cheap trick to ignore a bad scan inherent in the scanning mechanism
   $partselect = substr(mysql_real_escape_string($currentscan), 0, 5);
   $tempQuery .= 'part = "'.$partselect.'" OR ';

   };
};//end foreach 
$tempQuery = substr($tempQuery, 0, -3); //remove last OR (fixed substr to 0,-3 to scrip final OR - stephen) 
$tempQuery .= ") ORDER BY side DESC, plate ASC LIMIT 1"; //add on end of query 
$query = "SELECT french, length, plate, side, type FROM parts WHERE ".$tempQuery;
$result = mysql_query($query);
echo $result;
while($row = mysql_fetch_array($result)){
   print $row['french']." / ".$row['length']; //just doing something pointless to verify data was pulled.
}

sonucudur:

Warning: mysql_fetch_array (): verilen argüman on line 35 / home / foo / bar / sort.php geçerli MySQL result resource değildir

Line 35 is while($row = mysql_fetch_array($result)){

SON DÜZENLEME:

Bu çalışıyor.

//DECLARED CONSTANTS//

if (!$_POST) { // Have scans been entered? If not, display the form.
print '
<html>
<body>
Scans:
<form action="index.php" method="post">
<textarea rows="20" cols="6" name="scans" id="scans">
</textarea>
<br />
<input type="submit" value="Submit" />
</body>
</html>
';
} else { //Scans have been entered. Start scan processing logic

//==openDB==//
mysql_connect(SQLSERVER, SQLUSER, SQLPASSWORD) or die("Can not connect to DB server.");
mysql_select_db(DATABASE) or die("Can not connect to Database.");
//==openDB==//

$scans = explode("\n",$_POST['scans']); // Explode posted scans into scans array

foreach ($scans as $currentscan) { // step through each scan
   if ($currentscan[0] == "E") { //Cheap check for real part numbers.
   $partselect = substr(mysql_real_escape_string($currentscan), 0, 5); // Strip off the extraneous data from the scan
   $count{$partselect}++; //Count instances of particular parts. ideally this would be in an array in the form of $count[$partnumber] so I can easily display that data at the end. each part needs to be displayed every time it's scanned.
   $tempQuery .= 'part = "'.$partselect.'" OR '; //Starts building query

   };
};//end foreach 
$tempQuery = substr($tempQuery, 0, -3); //remove last OR 

$tempQuery .= ") ORDER BY side DESC, plate ASC"; //add on end of query 
$query = "SELECT part, french, length, plate, side, type FROM parts WHERE (".$tempQuery; //Form beginning of query
$result = mysql_query($query);// execute query
while($row = mysql_fetch_array($result)){ // step through results
   for ($i = 0; $i < $count{$row['part']}; $i++) { //if a part was scanned $count{$row['part']} times, display it that many times
   print $row['part']." ".$row['french']." / ".$row['length']." ".$row['plate']."(".$row['side'].")<br>";  //data parsing goes here. this will be expanded.
   };// close for loop
};//close while loop        
};//close else

?>

0 Cevap