Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL&php, taulurivi vain osalla listan jäsenistä

pzn [15.04.2013 07:20:02]

#

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.

The Alchemist [15.04.2013 07:53:56]

#

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

pzn [15.04.2013 08:40:35]

#

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ä?

The Alchemist [15.04.2013 09:22:45]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta