[MySQL] De juiste query voor deze gegevens

Pagina: 1
Acties:

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 12-04 14:05
Ik gebruik MySQL tot nu toe eigenlijk maar voor heel simpele queries, iets opvragen en dat uitlezen.

Nu wil ik echter iets ingewikkelders opvragen.

Ik schets even de situatie:

In de database "eendb" staan 2 tabellen. Een heeft de naam "users_bnc", de ander heeft de naam "bnc_vhosts".

In de tabel "bnc_vhosts" staan een aantal adressen van virtual hosts voor een BNC server, in een varchar veld, simpelweg alle beschikbare onder elkaar, met ervoor een kopje "id" en als eigen naam een kopje "vhost".

In de andere tabel "users_bnc" staan meerdere gegevens, waaronder weer het kopje "vhost".

Wat ik nu wil is kijken welke vhosts nog niet in gebruik zijn door de users (in de "users_bnc" tabel dus).

Hoe kan ik nu simpel met mysql_fetch_array (en dan in een while lus) gewoon al die beschikbare vhosts uit mysql laten komen?

Als ik het op de manier die ik nu ken ga doen, weet ik zeker dat ik iets krijg van 1 query die alle beschikbare vhosts ophaalt, dan een while lus, die voor iedere beschikbare een aparte query maakt naar de users_bnc tabel, en als deze daar niet in voorkomt, aangeeft dat die beschikbaar is.

Overigens kan een vhost meerdere malen voorkomen in de "users_bnc" tabel.

Ik maak gebruik van MySQL 4.0.20 , deze ondersteund geloof ik subqueries, maar ik weet niet of die hier van nut zijn. Het is zo lastig omdat ik dus moet contoleren op meerdere gegevens in een andere tabel.

Ik hoop dat iemand me opweg kan helpen met de juiste query :)

edit:
In principe niet belangrijk, maar ik maak gebruik van PHP om dit straks uit te lezen :)

[ Voor 8% gewijzigd door pierre-oord op 23-12-2004 23:56 ]

Ondernemer in tech (oud LOQED.com, nu UpToMore.com)


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Subqueries zijn niet ondersteund in jouw versie van MySQL, maar je komt er zo ook.
code:
1
2
3
4
5
6
SELECT
    bnc_vhosts.*
FROM
    bnc_vhosts LEFT JOIN users_bnc ON bnc_vhosts.id = users_bnc.vhost
WHERE
    users_bnc.id = NULL

Zoiets zou volgens mij de data terug moeten geven die je nodig hebt.

@Kippenijzer hierbeneden: ip2long() en long2ip(). :)

[ Voor 18% gewijzigd door NMe op 24-12-2004 00:16 ]

'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.


  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 17-05 17:29

Kippenijzer

McFallafel, nu met paardevlees

Licht offtopic misschien, maar waarom gebruik je niet gewoon een IP ipv een vhost? Bij mijn weten kan per IP maar 1 vhost ingesteld worden (de reverse DNS moet toch kloppen meen ik, en je hebt maar 1 rev. DNS per IP toch?). Als je dat nl. opslaat kun je ipv de "geheugeninefficiente" varchar, gewoon een INT nemen waarin een 8digit HEX gerepresenteerd kan worden. PHP heeft standaard functies om die weer als IP weer te geven, die je gewoon een lookup kunt geven indien je er ook echt de vhost naam bij wilt hebben. Dan lees je in de SQL gewoon "HEX(INT_veld)" uit, en gooi je die in de PHP functie, en voila, heb je het met IP's, wat imho handiger verwerken is (mocht je ooit vhosts veranderen hoef je je db niet aan te passen bijvoorbeeld)