[mysql/php] welke query kan ik het beste gebruiken?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet een bestaande query in een script aanpassen maar weet niet goed welke query ik het beste kan gebruiken zonder dat ik teveel moet gaan aanpassen aan het bestaande script.

Ik heb 2 tabellen: records en domainowners.
Van de tabel record is een bestaande query in een script welke ik moet aanpassen, dat is deze:
PHP:
1
2
3
4
$sql = mysql_query("SELECT * FROM records WHERE content='$oldip'");
while ($row = mysql_fetch_array ($sql)) { 
bla bla hele script
}


Nu voert dit script een actie uit op alles wat in de database zit van met een bepaalde waarde ($oldip)
Deze moet ik nu zo aanpassen zodat alle records van deze tabel records worden gekozen maar nu van een bepaalde gebruiker, echter de gebruiker staat niet in de tabel records.
In de tabel domainowners staat een userid (welke ik ook meef geef nu bij het php script) en een domainid, dit domainid staat weer wel in de tabel records!

Een match is dus het domainid in beide tabellen.

In een php script geef ik de waardes $oldip en $userid dus mee, nu moet ik een overzicht zien te krijgen van ALLE rijen in de tabel "records" met een bepaald IP adres ($oldip) welke aan een specifieke user ($userid) zijn toegewezen.

In theorie zou dat iets van dit moeten zijn :)
PHP:
1
2
3
4
mysql_query("SELECT * FROM records WHERE content='$oldip' and (
select domainid from domainowners where userid = '$userid';
list($domainid);
) domainid='$domainid' ");

Maar goed je begrijpt die query bestaat natuurlijk niet.....
Ik heb naar de optie join gekeken maar zie niet hoe ik dat hier kan gebruiken, ik gebruik join zelf niet en heb er ook totaal geen ervaring mee.

Ik wil eigenlijk niet de rest van het (reeds bestaande) script aanpassen zodat ik bv eerst een query doe op de domainowners en dan in een while functie dan weer de reeds bestaande query moet uitvoeren.

Iemand een idee of dit eenvoudig is op te lossen en eventueel hoe?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Dit is gewoon een simpele inner join, daar valt niet meer over te zeggen, sowieso niet omdat ik de datamodel niet precies ken. Lees onze SQL-FAQ hierover eens door, dan kom je er vast wel uit. ;)

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daar had ik naar gekeken, het probleem is dat ik met een innerjoin de velden moet specificeren.
Mijn huidige query is select * from en in de while wordt alles met row opgehaald.

Ik kan blijkbaar geen * gebruiken met een innerjoin......

Dat is dus eigenlijk het probleem waarom ik geen join kan gebruiken in deze opzet of zit ik er hier nu naast, zo ja hoe gebruik je die * dan in een join?

Acties:
  • 0 Henk 'm!

  • Rigi
  • Registratie: September 2001
  • Laatst online: 30-11-2018
Verwijderd schreef op dinsdag 02 december 2008 @ 11:36:
Daar had ik naar gekeken, het probleem is dat ik met een innerjoin de velden moet specificeren.
Mijn huidige query is select * from en in de while wordt alles met row opgehaald.

Ik kan blijkbaar geen * gebruiken met een innerjoin......

Dat is dus eigenlijk het probleem waarom ik geen join kan gebruiken in deze opzet of zit ik er hier nu naast, zo ja hoe gebruik je die * dan in een join?
Waarom kan je die * niet gewoon uitschrijven dan? Lijkt me sowieso wenselijker om het gewoon te specificeren wat je precies wilt hebben en ik welke volgorde.

[ Voor 8% gewijzigd door Rigi op 02-12-2008 11:41 ]


Acties:
  • 0 Henk 'm!

  • DaRKie
  • Registratie: December 2001
  • Laatst online: 16-09 16:18
kan je niet <alias>.* gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

DaRKie schreef op dinsdag 02 december 2008 @ 11:44:
kan je niet <alias>.* gebruiken?
Precies, dat zou in dit geval prima kunnen. Hoewel het klopt wat eerder gezegd is: je kunt beter specifiek zijn in je selectie. Maargoed, als je niet zeker weet wat de rest van het script allemaal nodig heeft, dan kun je beter alles selecteren (zeker als je zelf niet het script gemaakt hebt).

Je krijgt dan iets als:
SQL:
1
2
3
SELECT A.*
FROM table A
INNER JOIN table B ON B.id = A.id


Edit: SQL code block

[ Voor 12% gewijzigd door Verwijderd op 02-12-2008 13:26 ]


Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Voor de onderhoudbaarheid van je code is SELECT * wel fijn. Je programma zal blijven lopen als je kleine aanpassingen maakt in je database.
Maar goed, voor control freaks is dat misschien te eng ;)

Acties:
  • 0 Henk 'm!

  • Arethusa
  • Registratie: December 2003
  • Laatst online: 19-09 15:38

Arethusa

Niet die server

Ik vind je opmerking wel eng ;) O'Reilly meldt dit over het gebruik van select * (en zo zijn er nog wel meer mensen die deze zaak aanhalen).
When writing SELECT or INSERT statements in application code or stored procedures, you should always provide the full column lists for the SELECT or INSERT statement. If you use SELECT * in your code or in a stored procedure, the column list is resolved each time the SELECT statement is executed. If the table is altered to add or remove columns, the SELECT statement returns a different set of columns. This can cause your application or SQL code to generate an error if the number of columns returned is different than expected.
Bron: http://safari.oreilly.com/0672328240/ch46lev1sec1.

Deze zaken liggen wellicht buiten de scope van dit topic.

[ Voor 24% gewijzigd door Arethusa op 02-12-2008 15:35 ]

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
BazzPsychoNut schreef op dinsdag 02 december 2008 @ 15:27:
Voor de onderhoudbaarheid van je code is SELECT * wel fijn. Je programma zal blijven lopen als je kleine aanpassingen maakt in je database.
Maar goed, voor control freaks is dat misschien te eng ;)
Ja, want een crashende applicatie omdat 'ie een kolom niet kan vinden is natuurlijk veel makkelijker dan een error in een select statement in de trant van "help! deze kolom bestaat niet in deze tabel!".

|:(

https://niels.nu

Pagina: 1