Versio

Select * from db where

Overzicht Reageren

Paul Lambrechts

Paul Lambrechts

18/03/2011 05:08:26
Quote Anchor link
hallo
is het mogelijk om op meerdere tabelen te zoeken,
nu heb ik
$query = "SELECT * FROM `gebruikers` WHERE `refnr` = '".$_POST['ref']."'";
maar er zijn meerdere refnr van dezelfde persoon waar ik wil op zoeken.
 
PHP hulp

PHP hulp

25/05/2012 15:28:03
Gesponsorde koppelingen:
 
Wouter J

Wouter J

18/03/2011 07:43:14
Quote Anchor link
Allereerst horen backtricks niet thuis in query's, haal die dus weg.

En je kan op meerdere tabellen zoeken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$query
= "
  SELECT
     rij1, rij2
  FROM
     gebruikers as g,
     users as u
  WHERE
     g.refnr = 'iets'
  OR
     u.refnr = 'iets'
"
;
?>


En nog wat fouten in de query van jou:
- * is een wildcard en je kan nooit alles nodig hebben. Een id bijv. heb je bijna nooit nodig, selecteer dus wat je wilt.
- Script is lek -> SQL injection. Gebruik mysql_real_escape_string
- Als $_POST['ref'] een cijfer is moet die niet tussen quotes.
 
Barttje R

Barttje R

18/03/2011 10:24:32
Quote Anchor link
Even een reactie op de backticks:

Stel nou dat je de volgende query heb (los voorbeeld):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    g.title AS group
FROM
    groups AS g


Dan geeft een error tenzij je het volgende gebruikt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    g.title AS `group`
FROM
    groups AS g
Gewijzigd op 18/03/2011 10:34:16 door Barttje R
 
John D

John D

18/03/2011 10:43:02
Quote Anchor link
Gebruik geen backticks maar gewone quotes en vermijd verwarrende zaken zoals hierboven met group als alias en group als tabel. Laat de 2e AS ook maar weg!
SELECT
g.title AS 'Titel'
FROM
groups g
Gewijzigd op 18/03/2011 10:43:43 door John D
 
Barttje R

Barttje R

18/03/2011 10:54:28
Quote Anchor link
Oké van die 2e AS wist ik nog niet dat je dat weg kon laten.

Wouter J op 18/03/2011 07:43:14:
Allereerst horen backtricks niet thuis in query's, haal die dus...

Volgens MySQL worden deze gewoon gebruikt...
http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

Ik zie geen punt om ze niet te gebruiken, het is toch ook een stukje "security"?
Gewijzigd op 18/03/2011 10:55:01 door Barttje R
 
TJVB tvb

TJVB tvb

18/03/2011 11:06:04
Quote Anchor link
de backticks horen niet bij SQL. MySQL misbruikt het om je de mogelijkheid te geven om gereserveerde woorden te gebruiken.
 
Barttje R

Barttje R

18/03/2011 11:08:31
Quote Anchor link
Zoals in mijn eerste post dus..?
Het is een los voorbeeld maar zulke dingen gebruik ik i.v.m me template, maar het is dus niet 'raar' als ik backticks gebruik om deze woorden...
Gewijzigd op 18/03/2011 11:09:12 door Barttje R
 
TJVB tvb

TJVB tvb

18/03/2011 11:09:32
Quote Anchor link
Gereserveerde woorden zijn niet voor niks gereserveerd. Die moet je gewoon niet gebruiken.
 
Barman V

Barman V

18/03/2011 11:53:35
Quote Anchor link
Volgens mij is er nog niet echt een antwoord gegeven op je vraag. Over de code van Wouter. Het gebruik van OR is dodelijk binnen SQL. Er is in de loop van de jaren wel wat verbeterd met de performance, maar je kan dan zelfs nog beter 2 query's uitvoeren in plaats van eentje met een OR.

De beveiligingslekken en slordigheden komen volgens mij wel erg vaak voor. Het is een beetje dweilen met de kraan open :D.

Maar Paul, hoe wil jij op meerdere tabellen zoeken. Je kunt bijv tabellen koppelen dmv het joinen. Je kunt ook UNION gebruiken:
http://dev.mysql.com/doc/refman/5.0/en/union.html
 
John D

John D

18/03/2011 12:20:57
Quote Anchor link
Barman V op 18/03/2011 11:53:35:
Volgens mij is er nog niet echt een antwoord gegeven op je vraag. Over de code van Wouter. Het gebruik van OR is dodelijk binnen SQL. Er is in de loop van de jaren wel wat verbeterd met de performance, maar je kan dan zelfs nog beter 2 query's uitvoeren in plaats van eentje met een OR
Klinkklare onzin, broodje aap verhaal. Het kan voorkomen dat de engine er inderdaad intern 2 query's van maakt maar zelfs dat zal niet veel voorkomen en dus is het altijd sneller dan zelf twee query's te gaan zitten doen! Heb je een performance probleem op een OR ga dan maar eens kijken naar optimalisatie van je query en niet alles dubbel zitten processen en in PHP hele bakken data samenvoegen, doorlopen en weetikveel wat meer.
 
Pim -

Pim -

18/03/2011 16:45:00
Quote Anchor link
Ik snap de vraag niet helemaal...
 
Paul Lambrechts

Paul Lambrechts

18/03/2011 17:35:36
Quote Anchor link
ik zou graag op meerdere velden willen zoeken
 
Noppes Homeland

Noppes Homeland

18/03/2011 17:52:07
Quote Anchor link
En hoe wat waar wil je die data dan allemaal uittrekken, wat zijn dan de onderlinge relaties tussen de tabellen enz enz.

Maar ik denk dat je je eerst maar eens moet bezinnen of het niet verstandiger is je verder te verdiepen in SQL, zodat je wel doel gerichte vragen hierover kan stellen
 
- SanThe -

- SanThe -

18/03/2011 17:52:14
Quote Anchor link
SELECT ... WHERE veld1 = '$zoek' OR veld2 = '$zoek' OR veld3 = '$zoek'

En als het veld niet exact de waarde van $zoek heeft kan dit.
SELECT ... WHERE veld1 LIKE '%$zoek%' OR veld2 LIKE '%$zoek%' OR veld3 LIKE '%$zoek%'
Gewijzigd op 18/03/2011 18:13:56 door - SanThe -
 
Noppes Homeland

Noppes Homeland

18/03/2011 18:07:58
Quote Anchor link
- SanThe - op 18/03/2011 17:52:14:
En als het veld niet exact de waarde van $zoek heeft kan dit.
SELECT ... WHERE veld1 = '%$zoek%' OR veld2 = '%$zoek%' OR veld3 = '%$zoek%'


Pardon, wildcards bij een ordinaire vergelijking gaat niet werken!
http://www.w3schools.com/sql/sql_like.asp

Note: als je een LIKE niet nodig hebt moet je deze ook niet gebruiken, zoook moet je opletten hoe je je WHERE-clause opstelt
Gewijzigd op 18/03/2011 18:09:55 door Noppes Homeland
 
- SanThe -

- SanThe -

18/03/2011 18:15:22
Quote Anchor link
@Noppes: Helemaal gelijk. Ik ging duidelijk iets te snel. Verbeterd.
 



Overzicht Reageren