Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[PostgreSQL] Twee queries in een

Pagina: 1
Acties:

Onderwerpen


  • dev10
  • Registratie: april 2005
  • Laatst online: 17:08
Is het mogelijk om twee queries samen te voegen in een querie?
SQL:
1
SELECT firstname, lastname, refer, email, timestamp FROM orders WHERE id = '$products' ORDER BY refer

en:
SQL:
1
SELECT order_id FROM product_orders WHERE product_id IS '$product'

Dit moet dan iets worden als
SQL:
1
SELECT firstname, lastname, refer, email, timestamp FROM orders WHERE id IS (SELECT order_id FROM product_orders WHERE product_id IS '$product') ORDER BY refer

Heb jij HBO werk- en denkniveau en ben je op zoek naar een baan als developer? DM mij voor meer info.


  • Radiant
  • Registratie: juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator


  • dev10
  • Registratie: april 2005
  • Laatst online: 17:08
Iig alvast bedankt voor deze reply. Wat mijn probleem eigenlijk is, is dat ik wel netjes query om de order_id uit de tabel te halen uitvoer. Dit wordt dan in een array gezet. Daarna moet ik van de betreffende order_id's eden lijst maken met de voornaam, achternaam, email, referentienummer en de timestamp.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
//$product = pg_escape_string($product);
        $product = $_POST['product'];
        // Database functies includen en verbinding maken met de database
        require_once('db.php');
        $db = new Database();
        
        echo '<!-- '.$product.'-->';
        $results = $db->doQuery("SELECT order_id FROM products_orders WHERE product_id = '$product';");
                
        foreach($results as $order_id)
        {
            
            $order = $db->doQuery("SELECT firstname, lastname, refer, email, timestamp FROM orders WHERE id = '$order_id' ORDER BY refer");

Zoals je ziet probeer ik de order_id uit het resultaat van de eerste query te halen. Hieronder staat hoe dit in een array gezet wordt. Dit stukje code is een deel van de functie doQuery()
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$result = pg_query($this->connection, $query);


      $result_array = array();

      if ($result)
      {
      while ($row = pg_fetch_assoc($result)) {
         $result_array[] = $row;
      }
      return $result_array;
      }
      else
      {
       return false;
      }

Ik krijg als foutmelding: Warning: pg_query(): Query failed: ERROR: invalid input syntax for integer: "Array" in /user/p/c/m/pcm01/pcmedia.nl/docs/ordersysteem/db.php on line 19

Mijn idee was om dus die twee query's samen te voegen tot een query, maar iets zegt me dat dit niet zo'n goed idee is. Wat is volgens jullie wel een goed idee?

Heb jij HBO werk- en denkniveau en ben je op zoek naar een baan als developer? DM mij voor meer info.


  • Robtimus
  • Registratie: november 2002
  • Laatst online: 21:20

Robtimus

me Robtimus no like you

Op regel 9 van je 2e stuk code stop je $row in je array. Dit is zelf ook een array. Je krijgt dus een array van arrays.
Vervolgens gebruik je dat array op regel 10 van je 1e stuk code. Hierbij is $order_id dus geen integer zoals jij denkt maar een array.

Als PostGres subqueries ondersteunt is het trouwens eenvoudig:
SQL:
1
SELECT firstname, lastname, refer, email, timestamp FROM orders WHERE id IN (SELECT order_id FROM product_orders WHERE product_id IS '$product') ORDER BY refer

Je had het dus al bijna goed, alleen moet het IN zijn ipv IS.

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • dev10
  • Registratie: april 2005
  • Laatst online: 17:08
quote:
IceManX schreef op donderdag 26 april 2007 @ 16:39:
Op regel 9 van je 2e stuk code stop je $row in je array. Dit is zelf ook een array. Je krijgt dus een array van arrays.
Vervolgens gebruik je dat array op regel 10 van je 1e stuk code. Hierbij is $order_id dus geen integer zoals jij denkt maar een array
Is het mogelijk om van die array toch de order_id te gebruiken als integer?
quote:
Als PostGres subqueries ondersteunt is het trouwens eenvoudig:
SQL:
1
SELECT firstname, lastname, refer, email, timestamp FROM orders WHERE id IN (SELECT order_id FROM product_orders WHERE product_id IS '$product') ORDER BY refer

Je had het dus al bijna goed, alleen moet het IN zijn ipv IS.
Als ik dit gebruik krijg ik de foutmelding: Warning: pg_query(): Query failed: ERROR: relation "product_orders" does not exist in

Dit vind ik vrij vreemd aangezien die subquery als afzonderlijke query wel werkt.

Heb jij HBO werk- en denkniveau en ben je op zoek naar een baan als developer? DM mij voor meer info.


  • Robtimus
  • Registratie: november 2002
  • Laatst online: 21:20

Robtimus

me Robtimus no like you

quote:
letinon schreef op donderdag 26 april 2007 @ 16:55:
[...]


Is het mogelijk om van die array toch de order_id te gebruiken als integer?
$order_id['order_id'] neemt uit je associatieve array (column names naar values) de waarden van je order id.

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • dev10
  • Registratie: april 2005
  • Laatst online: 17:08

PHP:
1
2
3
4
5
6
$results = $db->doQuery("SELECT order_id FROM products_orders WHERE product_id = '$product';");
                
        foreach($results as $order)
        {
            
            $orderid = $results['order_id'];

Dit zou dan dus moeten werken neem ik aan? Als ik kijk wat er in de variabele $orderid staat, zie ik dat deze leeg is.

Ik heb ongeveer m'n halve ochtend hier op stuk zitten kijken, en het werkt nog steeds niet. |:(

Heb jij HBO werk- en denkniveau en ben je op zoek naar een baan als developer? DM mij voor meer info.


  • Robtimus
  • Registratie: november 2002
  • Laatst online: 21:20

Robtimus

me Robtimus no like you

Maak van $orderid = $results['order_id']; eens $orderid = $order['order_id']; ;)

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • dev10
  • Registratie: april 2005
  • Laatst online: 17:08
Wauw.. Dat werkt. Super bedankt zeg. ;)

Heb jij HBO werk- en denkniveau en ben je op zoek naar een baan als developer? DM mij voor meer info.

Pagina: 1


Apple iPhone 11 Microsoft Xbox Series X LG OLED C9 Google Pixel 4 CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True