WHERE toimii hienosti sql tiedon lajittelussa, kunhan kaikissa tauluissa on kaikki solut arvoja täynnä. Mutta jos tällä tavoin yrittää tehdä vaikka listan kaikista käyttäjistä ja saada mukaan ekstratietoa niistä, joilla sellaista on, niin tyhjien kohdalla tulee ongelma, he jäävät kokonaan pois listalta. Miten tuollainen reikäinen tieto kannattaa hakea ja tulostaa? Tieto lajitellaan id numeron perusteella ja tuo ekstratieto on olemassa vain esim riveillä 25 ja 30. Koko rivijoukko on esim 1-50.
Where-ehto ei lajittele tulosjoukkoa vaan sitä käytetään valitsemaan vain osa riveistä kaikkien mahdollisten rivien joukosta. Kysymyksesi on muutenkin varsin outo. Saat tulosjoukkoon mukaan minkä tahansa sarakkeen tiedot lisäämällä kyseisen sarakkeen SELECT-kyselyn poimittavien sarakkeiden listaan.
Lähtötilanne:
SELECT id, name FROM users
Muokattu kysely:
SELECT id, name, exra FROM users
Kyllä mä ainakin kovasti kuvittelin WHERE:n avulla lajittelevani. Jokaisella taulurivillä on uid -kenttä joita mätsään vastakkain esim
SELECT * FROM nimi, osoite, numero
WHERE
nimi.uid = osoite.uid AND
nimi.uid = numero.uid
tuosta sitten fetch ja echolla valuekentät taulukkoon. Ongelma on siis se, että jos jollain käyttäjällä ei olekaan riviä luotuna vaikka numero -nimisessä taulussa, niin ko käyttäjän kaikki tiedot jäävät pois hausta. Miten muokata hakua niin, että poisjätön sijaan puuttuvan tiedon kohdalla olisi tyhjä solu mutta käyttäjän muut tiedot näkyisivät?
Vai joutuuko kannasta hakemaan kasan tietoa ja laittamaan php:n töihin?
Moniuloitteinen array avuksi vai mikä?
Eihän tuo mitään lajittele vaan hakee kaikki rivit sekalaisessa järjestyksessä. Ongelmasi onkin siis se, että haluat joinata tauluja. Joinit tehdään - yllätys, yllätys - operaation nimen mukaisesti JOIN-avainsanaa käyttäen.
SELECT a.id, a.name, b.city FROM users a LEFT JOIN user_addresses b ON a.id = b.user_id
Meinasin tähän kohtaan linkata Putkan MySQL(+PHP)-oppaaseen, mutta sen monitaulukyselyitä käsittelevä osa olikin paskaa, joten ehkä joudut googlettamaan paremman oppaan jostain muualta. Oli siellä kyllä etäinen maininta JOIN-avainsanan käytöstä, mutten itsekään löytänyt sitä ilman selaimen sanahakutoimintoa.
LEFT JOIN sisällyttää tulokseen kaikki vasemmanpuoleisen taulun rivit vaikkei niille löytyisi join-ehtoon täsmäävää riviä oikeanpuoleisesta taulusta. Vastaavasti RIGHT JOIN sisällyttää tulokseen kaikki oikeanpuoleisen taulun rivit ja yhdistää niihin vasemman puolen taulusta rivit, jos ehtoon täsmääviä rivejä löytyy.
Aihe on jo aika vanha, joten et voi enää vastata siihen.