Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [mySQL] subselection (https://forum.scholieren.com/showthread.php?t=356004)

Druk ALT+F4 27-01-2003 09:38

[mySQL] subselection
 
Kan dit in mySQL?

Ik wil uit een tabel gebruikers alle resultaten halen met de volgende vergelijking:

UID moet voorkomen in de table MyTable waar waarde1, waarde2 en waarde3 gelijk zijn aan 1.

Als voorbeeld heb ik:



Maar dit werkt dus niet ?!
PHP-code:

        $r=mysql_query ("SELECT * FROM User_list WHERE Name = '$arg_list[1]' AND ACLID = 'SELECT ACLID FROM Access_control_list WHERE ACLID = 1'");
        while (
$row=mysql_fetch_object($r))
        echo 
$row->Name;
        die(
"ok"); 

Kan iemand vertellen wat hier fout aan is?

Jon 27-01-2003 10:42

Subselects werken (nog) niet in mySQL.

eddie 27-01-2003 10:42

mySQL ondersteund geen subselects :)

[edit]
Te laat :)

eXo 27-01-2003 10:47

Ik heb geen verstand van MySQL maar kan dta niet gewoon met een inner join?

Druk ALT+F4 27-01-2003 10:55

Citaat:

Jon schreef:
Subselects werken (nog) niet in mySQL.
Nog even wachten dus

http://www.mysql.com/doc/en/News-4.1.x.htmlhttp://www.mysql.com/doc/en/News-4.1.x.html

eddie 27-01-2003 11:02

Citaat:

eXo schreef:
Ik heb geen verstand van MySQL maar kan dta niet gewoon met een inner join?
Gegeven voorbeeld kan idd met een inner join. Maar dat was de vraag niet ;)

Triloxigen 27-01-2003 11:10

Citaat:

eddie schreef:
Gegeven voorbeeld kan idd met een inner join. Maar dat was de vraag niet ;)
Zin om me uit te leggen hoe dat werk? :p

edit: http://www.mysql.com/doc/en/JOIN.html

eddie 27-01-2003 11:18

Citaat:

McLaren schreef:
Zin om me uit te leggen hoe dat werk? :p

Nee :p

Druk ALT+F4 27-01-2003 12:04

Zo werkt het ook, maar ik vind subselectie toch wel ff wat handiger

PHP-code:

        return (mysql_num_rows (mysql_query ("SELECT * FROM User_list LEFT JOIN Access_control_list ON User_list.ACLID = Access_control_list.ACLID WHERE Access_control_list.ACLID = User_list.ACLID AND Access_control_list.Allow_view = '1' AND Name = '$arg_list[1]' AND Password = '$arg_list[2]'")) > 0); 


eddie 27-01-2003 12:12

Citaat:

Druk ALT+F4 schreef:
Zo werkt het ook, maar ik vind subselectie toch wel ff wat handiger

Maar subselects zijn trager dan (inner) joins. :)

eXo 27-01-2003 22:29

En vaak ingewikkelder om te lezen / schrijven (imho)


Overigens je hebt wel veel verstand van SQl.. voor iemand die 10 is dan.

Druk ALT+F4 28-01-2003 10:06

Citaat:

eXo schreef:
En vaak ingewikkelder om te lezen / schrijven (imho)


Overigens je hebt wel veel verstand van SQl.. voor iemand die 10 is dan.

Kwestie van smaak

Inner join

PHP-code:

return (mysql_num_rows (mysql_query ("SELECT * FROM User_list LEFT JOIN
                                      Access_control_list ON User_list.ACLID = Access_control_list.ACLID WHERE
                                      Access_control_list.ACLID = User_list.ACLID AND
                                      Access_control_list.Allow_view = '1' AND
                                      Access_control_list.Allow_request = '1' AND
                                      Access_control_list.Allow_modify = '1' AND
                                      Name = '
$arg_list[1]' AND
                                      Password = '
$arg_list[2]'
                                    "
)) > 0); 

Subselectie

PHP-code:

return (mysql_num_rows (mysql_query ("SELECT * FROM User_list WHERE
                                      Name = '
$arg_list[1]' AND
                                      Password = '
$arg_list[2]' AND
                                      ACLID IN ('SELECT ACLID FROM
                                                    Access_control_list WHERE
                                                    Access_control_list.Allow_view = '1' AND
                                                    Access_control_list.Allow_request = '1' AND
                                                                Access_control_list.Allow_modify = '1' AND
                                                               ')
                                        "
)) > 0); 

Geef mij dan toch maar subselectie

P.S. dit snapt iedereen toch wel? Een kind kan de was doen ;)

bam 28-01-2003 10:06

Citaat:

eXo schreef:
En vaak ingewikkelder om te lezen / schrijven (imho)


Overigens je hebt wel veel verstand van SQl.. voor iemand die 10 is dan.

Je wou toch niet zeggen dat je dat geloofde :p

Druk ALT+F4 28-01-2003 10:10

Citaat:

bambix schreef:
Je wou toch niet zeggen dat je dat geloofde :p
:D

Aangeboren talent :p

bam 28-01-2003 10:45

Citaat:

Druk ALT+F4 schreef:
:D

Aangeboren talent :p

http://forum.scholieren.com/showthre...76#post3211476

yeah right;)

eddie 28-01-2003 11:59

Citaat:

Druk ALT+F4 schreef:
Kwestie van smaak

Inner join

*code*

Subselectie

*code*

Geef mij dan toch maar subselectie

P.S. dit snapt iedereen toch wel? Een kind kan de was doen ;)

In dit voorbeeld is het JUIST nuttig om een subselectie te doen. Maar wat die query (verder) zo traag maakt, is de IN-clause.

Je inner join is trouwens een LEFT JOIN.

Ik zou het zo doen (er zijn meedere varianten mogelijk):
Code:

SELECT ul.*
FROM User_List AS ul
INNER JOIN(
  SELECT list.ACLID
  FROM Access_control_list AS list
  WHERE list.Allow_view = '1' ...etc
) AS acl
ON acl.ACLID = ul.ACLID
WHERE
  ul.Name = 'naampje'  AND (rest...)

Maar ik vraag me af of mySQL dat aan kan :)

Verder, waarom maak je van je Allow_view etc niet een bit, ipv een (var?)char?

Druk ALT+F4 28-01-2003 12:50

Citaat:

eddie schreef:
In dit voorbeeld is het JUIST nuttig om een subselectie te doen. Maar wat die query (verder) zo traag maakt, is de IN-clause.

Je inner join is trouwens een LEFT JOIN.

Ik zou het zo doen (er zijn meedere varianten mogelijk):
Code:

SELECT ul.*
FROM User_List AS ul
INNER JOIN(
  SELECT list.ACLID
  FROM Access_control_list AS list
  WHERE list.Allow_view = '1' ...etc
) AS acl
ON acl.ACLID = ul.ACLID
WHERE
  ul.Name = 'naampje'  AND (rest...)

Maar ik vraag me af of mySQL dat aan kan :)

Verder, waarom maak je van je Allow_view etc niet een bit, ipv een (var?)char?

Omdat dit een ID is, zoals in Allow on ID (Geen bool, whatever). Het zou eigenlijk een byte moeten zijn (Ik weet niet eens of dat bestaat in mySQL, of wat de alias is).

En ja, ik bedoel natuurlijk ook LEFT JOIN. Stupid me


Alle tijden zijn GMT +1. Het is nu 00:50.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.