Probleem met een * JOIN en een while statement

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
Ik heb de volgende query gebruikt maar loop vast bij de fetch via een while statement.

PHP:
1
2
3
4
5
6
7
8
9
10
11
$sql =" SELECT a.*, b.* FROM list1 as a LEFT JOIN list2 as b ON a.user_id=b.user_id WHERE a.klantnummer LIKE '%$zoek%' or a.username LIKE '%$zoek%' or a.achternaam LIKE '%$zoek%' or a.bedrijfsnaam LIKE '%$zoek%' or a.email LIKE '%$zoek%' or b.ipadres LIKE "%$zoek%" ";

  $result = mysql_query("$sql", $db1);  
  while ( $row = mysql_fetch_array($result) ) 
   {
   $username=$row["a.username"];
   $bedrijfsnaam=$row["a.bedrijfsnaam"];
   $klantnummer=$row["a.klantnummer"];
   $ipadres=$row["b.ipadres"];
   echo "$username $ipadres";
   }

(ik heb de query verkleind, in het echt is deze veel langer, de echte query werkt dus met alleen * wel, daar zit dus geen fout in)

Ik krijg geen error te zien maar ook geen resultaten terug terwijl deze er wel zijn.

Verander ik in de sql "a.*, b.*" in "*" en in de while statement verwijder ik de "a." en "b." krijg ik wel een results terug.

Mijn vraag is waarom mag "a.*, b.*" niet werkt of doe ik iets verkeerd in de while statement?
Ik kom er op dit moment niet meer uit, zal wel een kleinigheid zijn, de manual geeft ook geen duidelijk advies.

Enige tips zijn welkom

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Huh :? $row["a.username"] bestaat toch niet? Da's dan toch gewoon $row["username"]? (Of is dat een PHP iets?). Als je in A en B een username hebt zitten (en je dus beiden wil gebruiken) zul je ze moeten aliassen.

Verder zie ik helemaal aan 't eind van je query een fout in de quotes (dat zie je dankzij onze syntax highlighter ook mooi oplichten). En verdiep je even in SQL injection.

[ Voor 35% gewijzigd door RobIII op 29-09-2009 17:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Krijg je errors? Zo ja, meld deze eens?

En vertel me alsjeblieft dat je echte query niet nog meer "or $veldnaam LIKE '%$zoek%' bevat.

edit: met RobIII.

[ Voor 7% gewijzigd door MueR op 29-09-2009 17:18 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

RobIII schreef op dinsdag 29 september 2009 @ 17:13:
Huh :? $row["a.username"] bestaat toch niet? Da's dan toch gewoon $row["username"]? (Of is dat een PHP iets?).
Nee, dat is gewoon niet op de hoogte zijn van hoe iets werkt, blijkbaar. :) De associatieve array die je terugkrijgt van PHP is adresseerbaar op veldnaam, niet op tabelnaam.veldnaam.
Als je in A en B een username hebt zitten (en je dus beiden wil gebruiken) zul je ze moeten aliassen.
Inderdaad.
MueR schreef op dinsdag 29 september 2009 @ 17:18:
Krijg je errors? Zo ja, meld deze eens?
Gokje: "Column 'x' in field list is ambiguous"

[ Voor 15% gewijzigd door NMe op 29-09-2009 17:21 ]

'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

Ik vermoed dat je inderdaad moet gaan aliassen. tabel a zal wel iets van een id kolom hebben, die ook in tabel b zit oid.

Dit krijg je dus met select *
Niet doen, gewoon de data ophalen die je wilt hebben

code:
1
SELECT a.id AS Aid, a.username as Ausername, b.id AS Bid, b.username AS Busername from tabel


Keep It Simple Stupid ;)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op dinsdag 29 september 2009 @ 17:19:
Nee, dat is gewoon niet op de hoogte zijn van hoe iets werkt, blijkbaar. :) De associatieve array die je terugkrijgt van PHP is adresseerbaar op veldnaam, niet op tabelnaam.veldnaam.
Inderdaad; het DBMS zal die tabelnaam niet eens teruggeven (AFAIK, hoewel 't op driverniveau vast bekend is/kan zijn). Maar dan vind ik 't vreemd dat 't volgens TS wél werkt met een select * en dan a.username :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

RobIII schreef op dinsdag 29 september 2009 @ 17:27:
[...]

Inderdaad; het DBMS zal die tabelnaam niet eens teruggeven (AFAIK, hoewel 't op driverniveau vast bekend is/kan zijn). Maar dan vind ik 't vreemd dat 't volgens TS wél werkt met een select * en dan a.username :?
"(ik heb de query verkleind, in het echt is deze veel langer, de echte query werkt dus met alleen * wel, daar zit dus geen fout in)"

Ik neem aan dat dat betekent dat hij alle aliassen verder helemaal weglaat. ;)

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

Pagina: 1