Oud 27-01-2003, 09:38
Druk ALT+F4
Avatar van Druk ALT+F4
Druk ALT+F4 is offline
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?

Laatst gewijzigd op 27-01-2003 om 10:16.
Met citaat reageren
Advertentie
Oud 27-01-2003, 10:42
Jon
Avatar van Jon
Jon is offline
Subselects werken (nog) niet in mySQL.
__________________
Wer nicht fragt bleibt dumm.
Met citaat reageren
Oud 27-01-2003, 10:42
Verwijderd
mySQL ondersteund geen subselects

[edit]
Te laat
Met citaat reageren
Oud 27-01-2003, 10:47
Verwijderd
Ik heb geen verstand van MySQL maar kan dta niet gewoon met een inner join?
Met citaat reageren
Oud 27-01-2003, 10:55
Druk ALT+F4
Avatar van Druk ALT+F4
Druk ALT+F4 is offline
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
Met citaat reageren
Oud 27-01-2003, 11:02
Verwijderd
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
Met citaat reageren
Oud 27-01-2003, 11:10
Verwijderd
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?

edit: http://www.mysql.com/doc/en/JOIN.html
Met citaat reageren
Oud 27-01-2003, 11:18
Verwijderd
Citaat:
McLaren schreef:
Zin om me uit te leggen hoe dat werk?
Nee
Met citaat reageren
Oud 27-01-2003, 12:04
Druk ALT+F4
Avatar van Druk ALT+F4
Druk ALT+F4 is offline
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); 
Met citaat reageren
Oud 27-01-2003, 12:12
Verwijderd
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.
Met citaat reageren
Oud 27-01-2003, 22:29
Verwijderd
En vaak ingewikkelder om te lezen / schrijven (imho)


Overigens je hebt wel veel verstand van SQl.. voor iemand die 10 is dan.
Met citaat reageren
Oud 28-01-2003, 10:06
Druk ALT+F4
Avatar van Druk ALT+F4
Druk ALT+F4 is offline
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
Met citaat reageren
Oud 28-01-2003, 10:06
bam
Avatar van bam
bam is offline
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
__________________
Ik ben nieuw
Met citaat reageren
Oud 28-01-2003, 10:10
Druk ALT+F4
Avatar van Druk ALT+F4
Druk ALT+F4 is offline
Citaat:
bambix schreef:
Je wou toch niet zeggen dat je dat geloofde


Aangeboren talent
Met citaat reageren
Oud 28-01-2003, 10:45
bam
Avatar van bam
bam is offline
Citaat:
Druk ALT+F4 schreef:


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

yeah right
__________________
Ik ben nieuw
Met citaat reageren
Oud 28-01-2003, 11:59
Verwijderd
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?
Met citaat reageren
Oud 28-01-2003, 12:50
Druk ALT+F4
Avatar van Druk ALT+F4
Druk ALT+F4 is offline
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
Met citaat reageren
Advertentie
Reageren

Topictools Zoek in deze topic
Zoek in deze topic:

Geavanceerd zoeken

Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 01:26.