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!!!
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ä.
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, '')
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)
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.
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ä"
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.
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ä.
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!!
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.
Taisi onnistua kun tarpeeksi kokeili...
Aihe on jo aika vanha, joten et voi enää vastata siihen.