Как запустить эти два запроса одновременно? - PullRequest
0 голосов
/ 20 сентября 2011

ОБНОВЛЕНО PHP

    <?php 
    $result = $sth->fetchAll();
    print_r($result); //or var_dump($result); for more info
    foreach($result as $row){
        print_r($row);
    }   
    ?>  

В представлении SQL:

$pdo = new PDO($h1, $u, $p);
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $pdo->prepare('
SELECT uFName, uLName, listTitle, listPropPrice, listCmt, listDt
FROM User U, Listing L
WHERE U.uID = L.uID
;');
$sth->execute(array());

#GET Merchant (Seller) Info and Listings Offered On
$pdo2 = new PDO($h1, $u, $p);
$pdo2->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth2 = $pdo2->prepare('
SELECT mFName, mLName, moAmt, moDtOff
FROM Merchant M, MerchantOffer MO, Listing L
WHERE M.mID = MO.mID 
AND L.listID = MO.listID
;');
$sth2->execute(array());

Как мне запустить $sth и $sth2 в одном и том же WHILE ЗАЯВЛЕНИИ?

SCHEMA imggg

Вывод кода Луи: kfgdfgdfgdf

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

вам не нужно запускать ваши запросы одновременно.

На самом деле получение данных из базы данных не имеет (или должно быть) никакого отношения к созданию HTML. Это разные задачи.

Итак, сначала поместите ваши данные в массив (ы), а затем распечатайте их любым способом - одновременно или в клеточку.

0 голосов
/ 01 марта 2012

Я обновил код Луи, потому что я думаю, что он может лучше обрабатывать.

//Get the listing info
$pdo = new PDO($h1, $u, $p);
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $pdo->prepare('
  SELECT uFName, uLName, listTitle, listPropPrice, listCmt, listDt, listID
  FROM User U, Listing L
  WHERE U.uID = L.uID');
$sth->execute();

$listings = $sth->fetchAll();

//Prepare the statement to grab the merchant info for the listing
$pdo2 = new PDO($h1, $u, $p);
$pdo2->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth2 = $pdo2->prepare('
  SELECT mFName, mLName, moAmt, moDtOff
  FROM Merchant M, MerchantOffer MO, Listing L
  WHERE M.mID = MO.mID 
  AND L.listID = MO.listID
  and L.listID = :listid');

$sth2->bindParam(':listid', $listing['listID'], PDO::PARAM_INT);

//loop through all the listings
foreach($listings as $listing){

    echo "Listing info...<br/>";

    // Executed prepared statement (the parameter is updated automatically)
    $sth2->execute();

    //if there is only one merchant per listing, probably don't 
    //need fetchAll and can go back to single row
    $merchants = $sth2->fetchAll();
    //loop through all merchants
    foreach($merchants as $merchant){
       echo "Merchant info...<br/>";
    }
}

Изменения:

  • Используйте bindParam для установки значений (если вы используете PDO, этолучше использовать его или bindValue).
  • Сделайте только один подготовленный оператор для его оптимизации, а не один для каждой итерации.
  • Remove ';'из руководства sql, php говорят, что предложение sql должно быть без него.

Я не могу комментировать, потому что я сделал новый ответ вместо комментария или отредактировал ответ Луи.

0 голосов
/ 20 сентября 2011

Я думаю, что вы ищете оператор fetchAll , тогда у вас будет массив результатов для повторения в то же время, что и другой оператор while. (вам нужно следить за отдельным счетчиком)

UPDATE:

Теперь я понял, попробуй это.

 //Get the listing info
  $pdo = new PDO($h1, $u, $p);
  $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  $sth = $pdo->prepare('
    SELECT uFName, uLName, listTitle, listPropPrice, listCmt, listDt, listID
    FROM User U, Listing L
    WHERE U.uID = L.uID
  ;');
  $sth->execute(array());

  $listings = $sth->fetchAll();

  //loop through all the listings
  foreach($listings as $listing){

    echo "Listing info...<br/>";

    //grab the merchant info for the listing
    $pdo2 = new PDO($h1, $u, $p);
    $pdo2->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $sth2 = $pdo2->prepare("
      SELECT mFName, mLName, moAmt, moDtOff
      FROM Merchant M, MerchantOffer MO, Listing L
      WHERE M.mID = MO.mID 
      AND L.listID = MO.listID
      and L.listID = {$listing['listID']}
    ;");
    $sth2->execute(array());

    //if there is only one merchant per listing, probably don't 
    //need fetchAll and can go back to single row
    $merchants = $sth2->fetchAll();
    //loop through all merchants
    foreach($merchants as $merchant){
      echo "Merchant info...<br/>";
    }
  }
...