[PHP/MYSQL] Query in een query nesten

Pagina: 1
Acties:
  • 116 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Lennart_1337
  • Registratie: Juni 2004
  • Laatst online: 09-09 14:56
Ik kan het niet goed uitleggen daarom hier een voorbeeldje:

Zoals het in mijn oracle SQL boek staat:
(ik probeer dit dus in PHP en MySQL)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        $query = "  SELECT  accomodatie_caravan_bungalow_id
                    FROM    accomodaties_caravan_bungalow
                    WHERE in accomodatie_caravan_bungalow_id
                    (
                        SELECT  accomodatie_caravan_bungalow_id
                        FROM    boekingen_caravan_bungalow
                        WHERE   boeking_caravan_bungalow_einddatum='test'
                    )
                ";
        $result = mysql("zeezicht", $query);

        while ($row=mysql_fetch_array($result))
        {
                echo $row[accomodatie_caravan_bungalow_id];
                echo"<br>";
        }

Dit levert de volgende foutmelding op:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev\www\public\php test samples\php select query.php on line 13

Daarna heb ik de "in" verandert en een = erbij gezet zola
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        $query = "  SELECT  accomodatie_caravan_bungalow_id
                    FROM    accomodaties_caravan_bungalow
                    WHERE   accomodatie_caravan_bungalow_id=
                    (
                        SELECT  accomodatie_caravan_bungalow_id
                        FROM    boekingen_caravan_bungalow
                        WHERE   boeking_caravan_bungalow_einddatum='test'
                    )
                ";
        $result = mysql("zeezicht", $query);

        while ($row=mysql_fetch_array($result))
        {
                echo $row[accomodatie_caravan_bungalow_id];
                echo"<br>";
        }

Dit levert de weer volgende foutmelding op:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev\www\public\php test samples\php select query.php on line 13

Ik heb toen het onderste gedeelte uitgeprobeert
code:
1
2
3
4
5
6
7
8
9
10
11
12
        $query = "  SELECT  accomodatie_caravan_bungalow_id
                    FROM    boekingen_caravan_bungalow
                    WHERE   boeking_caravan_bungalow_einddatum='test'

                ";
        $result = mysql("zeezicht", $query);

        while ($row=mysql_fetch_array($result))
        {
                echo $row[accomodatie_caravan_bungalow_id];
                echo"<br>";
        }

En dit leverde de goede resultaten op.

Toen heb ik het bovenste gedeelte los uitgeprobeert
code:
1
2
3
4
5
6
7
8
9
10
11
        $query = "  SELECT  accomodatie_caravan_bungalow_id
                    FROM    accomodaties_caravan_bungalow
                    WHERE   accomodatie_caravan_bungalow_id='B02'
                ";
        $result = mysql("zeezicht", $query);

        while ($row=mysql_fetch_array($result))
        {
                echo $row[accomodatie_caravan_bungalow_id];
                echo"<br>";
        }

En dit werkte ook perfect.
Het veld accomodatie_caravan_bungalow_id is bevat dus in beide tabellen B02

Waarom werken de bovenste 2 voorbeelden niet?
Hoe moet het wel?

Ik heb PHPDev 5 geïnstalleerd met:
* apache 1.3.2 7AND/OR apache 2.0.43
* Zend Optimiser
* PHP4.2.3
* MySQL4 (alpha but stabler than the older release version
* phpMyAdmin 2.3.2

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

"supplied argument is not a valid MySQL result resource" betekend dat je een record aan het fetchen bent terwijl je geen recordset hebt. $result verwijst niet naar een geldige recordset. Dit komt omdat je query fout gegaan is. Wat er precies bij de query fout gegaan is kun je weergeven met

echo mysql_error();

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
De subqueries die ik weleens heb gebruikt in Oracle werkte ook niet onder m'n MySQL install (v.4.1).

Op http://dev.mysql.com/tech...es/subqueries_part_1.html en http://dev.mysql.com/doc/refman/4.1/en/subqueries.html is meer info over subqueries in MySQL, ik meende dat MySQL hierbij minder uitgebreid was.

[ Voor 17% gewijzigd door Upsal op 30-05-2006 22:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Zonder enige ervaring met MySQL denk ik dat je eerste query gewoon een syntax error heeft:
"WHERE in <veldnaam> (<subselect>)" moet wrs "WHERE <veldnaam> in (<subselect>)" zijn.
En de 2e query:
"WHERE <veldnaam> = (<subselect>)" gaat niet goed als die subselect meer dan 1 waarde oplevert.
Interbase komt dan bv. met een "multiple rows in een singleton select", en kapt er ook mee.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
WHERE in accomodatie_caravan_bungalow_id
Ik geloof niet dat MySQL dat kent, maar dit

SQL:
1
2
3
4
5
6
7
8
SELECT accomodatie_caravan_bungalow_id
FROM accomodaties_caravan_bungalow
WHERE accomodatie_caravan_bungalow_id IN 
(
   SELECT accomodatie_caravan_bungalow_id
   FROM boekingen_caravan_bungalow
   WHERE boeking_caravan_bungalow_einddatum = 'test'
)


zou moeten werken. En anders moet je maar even debuggen ;)
echo $row[accomodatie_caravan_bungalow_id];
Je devt zeker zonder error_reporting ? ;)

[ Voor 15% gewijzigd door XWB op 30-05-2006 22:32 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Lennart_1337
  • Registratie: Juni 2004
  • Laatst online: 09-09 14:56
Bij het eerste voorbeeld wat zou moeten werken volgens het oracle boek geeft 'ie nu idd. de foutmelding wat meer gespecificeerd:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        $query = "  SELECT  accomodatie_caravan_bungalow_id
                    FROM    accomodaties_caravan_bungalow
                    WHERE   accomodatie_caravan_bungalow_id=
                    (
                        SELECT  accomodatie_caravan_bungalow_id
                        FROM    boekingen_caravan_bungalow
                        WHERE   boeking_caravan_bungalow_einddatum='test'
                    )
                ";
        $result = mysql("zeezicht", $query);

        while ($row=mysql_fetch_array($result))
        {
                echo $row[accomodatie_caravan_bungalow_id];
                echo"<br>";
        }
        echo mysql_error();

Output:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev\www\public\php test samples\php select query.php on line 13

You have an error in your SQL syntax near 'SELECT accomodatie_caravan_bungalow_id FROM boekingen_caravan_bungalo' at line 5


Ik kan op die regel niks raars onddekken...
Kan iemand anders met deze meding wat?

[Edit]
Ik had niet genoeg ge F5-ed.
Bedankt voor alle hulp, ik ga er mee aan de gang :)

[ Voor 12% gewijzigd door Lennart_1337 op 30-05-2006 22:32 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat Afterlife zegt. Kijk sowieso eens naar joins, die lopen een stuk lekkerder op MySQL.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1