Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: SQL kysely apuja

Sivun loppuun

anodi [15.07.2013 16:10:51]

#

Morjens,

Olen hyvin vasta-alkaja näissä asioissa joten tarvitsen apua haun tekemiseen. Yksinkertaiset kyselyt onnistuu mutta en osaa yhdistellä montaa solua yhdeksi.


SQL tietokannasta pitäisi saada haku jossa lopputuloksena taulukko jossa on seuraavanlaiset kaksi solua: id ja solu jonka sisältö on tämän näköinen: /kuva1;/kuva2;/kuva3...

Lähteenä on sql taulu jossa on solut: "id" ja "kuva" "kuva" solussa voi olla samalle id:lle monta riviä joissa on eri kuvien nimi:

id kuva
22 photo1
22 photo2
22 photo3
44 picture1
44 picture2
55 null
...

Lopputuloksena siis pitäisi olla taulukko jossa ekassa solussa id ja toisessa solussa yhdistettynä kaikki kuvat, jotka on erotettu puolipisteellä ja joiden eteen on laitettu / merkki:

id kuvat
22 /photo1;/photo2;photo3
44 /picture1;picture2
55 /null

Osaisikohan joku auttaa miten saan moisen hoidettua?

Kiitoksia etukäteen!!!

The Alchemist [15.07.2013 16:31:26]

#

Luet datan kannasta ja yhdistelet sovelluksen koodissa saman id:n rivit yhteen. Mitään geneeristä "sql-tietokantaa" ei ole olemassakaan, joten olisi hyvä määritellä sekin, mikä kanta ja myös mitä ohjelmointikieliä on käytössä.

groovyb [15.07.2013 16:48:45]

#

no SQL standardi kuitenkin on olemassa, mikäli tässä nyt SQL:n syntaksilla luoda kysely, ilman eri servereiden tarjoamia funktioita. Ei kyselyn muodostamiseen tarvita ohjelmointikieltä. useat (ellei kaikki) SQL -pohjaiset palvelimet tarjoavat mukanaan työkalun kyselyiden testaamista varten. Tuo lopputuloksen array vaatii vähän tietoa ohjelmointitavasta, ellei tarkoituksena ole lisätä merkkejä jo itse kyselyssä (esim. JokuKolumninarvo + ISNULL('Tämä lisätään' + TämänKolumninEteen, '')

Grez [15.07.2013 17:01:50]

#

groovyb kirjoitti:

no SQL standardi kuitenkin on olemassa

Haastanpa sut nyt sitten kirjoittamaan tuollaisen kyselyn SQL standardia käyttäen. En sano että on mahdotonta, mutta huomattavasti helpommalla pääsee jos saa käyttää kantakohtaisia ratkaisuja. Vaikkapa MySQL:llä tuo menisi hyvinkin helposti esim näin:

select id, group_concat(concat('/',kuva) separator ';') from anodi group by id;

(tosin suoraan sanoen en ihan hiffaa millä logiikalla anodin esimerkissä noi / -merkit tulee, mutta oletin että ne on vaan unohtunut parista kohtaa)

groovyb [15.07.2013 17:29:10]

#

Grez, tottakai kantakohtaisia tuleekin käyttää. Mutta onhan noita paskojakin SQL palvelimia (ja Standalone virityksiä kuten SQLite etc.) jotka ei ihan tarjoa samanlaista kirjoa funktioista kuin esimerkiksi MSSQL. ja näihin tarkoituksiin ei oikein auta kuin perus SQL standardi. En edes jaksa moista kyselyä vääntää. ja kuten tuohon edelliseen viestiini kirjoitinkin: Mikäli tässä nyt SQL:n syntaksilla luoda kysely, ilman eri servereiden tarjoamia funktioita.

Grez [15.07.2013 18:06:15]

#

No jotenkin vaan vastauksesi vaikutti siltä kuin olisit ollut eri mieltä Alchemistin kanssa siitä että "olisi hyvä määritellä sekin, mikä kanta ja myös mitä ohjelmointikieliä on käytössä"

The Alchemist [15.07.2013 19:25:38]

#

groovyb kirjoitti:

Grez, tottakai kantakohtaisia tuleekin käyttää. Mutta onhan noita paskojakin SQL palvelimia (ja Standalone virityksiä kuten SQLite etc.) jotka ei ihan tarjoa samanlaista kirjoa funktioista kuin esimerkiksi MSSQL. ja näihin tarkoituksiin ei oikein auta kuin perus SQL standardi.

Minun mielestäni tähän juuri ei auta standardi sql yhtään mitään, koska vaaditaan kehittyneempiä funktioita kuten Grezin esimerkissä. Ohjelmointikielellä on väliä siinä vaiheessa, jos ei ole mahdollista luoda tarvitunlaista kyselyä tietokantamoottorin rajoituksista johtuen ja kuitenkin halutaan toimivaa esimerkkiä tarjota.

groovyb [15.07.2013 20:06:03]

#

No hieman olinkin erimieltä, koska en tiedä onko mitään ohjelmointikieltä käytössä, vaiko vain testata kyselyä tai suorittaa kysely palvelimella ja tallentaa vaikka CSV:ksi muuta käyttöä varten, palvelimen omalla softalla. Kanta olisi hyvä tietää, jotta omia funkkareita voisi hyödyntää, koska standardilla on melko haastavaa tehdä vähänkään monimutkaisempia kyselyitä.

anodi [16.07.2013 09:23:47]

#

Kiitoksia!!! Tuo lauseke toimii. Teen sql hakua mysql:ssä viedäkseni vanhasta systeemistä uuteen tietoja. Pitäisi vielä saada nämä lausekkeet yhdistettyä:

select products_images.products_id,  group_concat(concat('/', image_name) separator ';') as image_gallery from products_images group by products_id

ja

SELECT products.products_model , products_description.products_name , products_description.`products_description` , `products_description`.`products_short_description` ,
products_others.* , products.products_quantity , products.products_price
, products.products_ordered ,
personal_offers_by_customers_status_4.personal_offer , products.products_image
FROM products LEFT JOIN (products_description, products_others ,
personal_offers_by_customers_status_4) ON
(products.products_id=products_description.products_id AND
products.products_id=products_others.products_id AND
products.products_id=personal_offers_by_customers_status_4.products_id )
WHERE products_description.language_id=3 AND products_others.ostopaikka
like '%NS%'
 ORDER BY products.products_model AS

En vaan onnistunut... Voisikohan joku vielä tämän verran auttaa!


Kiitos!!

feenix [16.07.2013 16:20:58]

#

SELECT products.products_model , products_description.products_name , products_description.`products_description` , `products_description`.`products_short_description` ,

products_others.* , products.products_quantity , products.products_price

, products.products_ordered ,

personal_offers_by_customers_status_4.personal_offer , products.products_image,
 group_concat(concat('/', products_images.image_name) separator ';')

FROM products LEFT JOIN (products_description, products_others ,

personal_offers_by_customers_status_4, products_images) ON

(products.products_id=products_description.products_id AND

products.products_id=products_others.products_id AND

products.products_id­=personal_offers_by_customers_status_4.products_id,
products.products_id=products_images.products_id )

WHERE products_description.language_id=3 AND products_others.ostopaikka

like '%NS%'

group by products.products_id

ORDER BY products.products_model AS

Jotain tuollaista? Todennäköisesti vaatii myös muut kentät group by:n perään, joten saattaisi mennä helpommin alikyselyllä tms. En kuitenkaan käytä MySQLää niin sen suhteen en osaa auttaa.

anodi [16.07.2013 16:39:33]

#

Taisi onnistua kun tarpeeksi kokeili...


Sivun alkuun

Vastaus

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

Tietoa sivustosta