Tuli tosiaankin ongelmaa hakulausekkeen kanssa joka hakee tietokannasta yritykset jotka ovat tarjonneet, mutta miten saisin käännettyä lausekkeen toisinpäin eli hakee että ketkä eivät ole tarjonneet. Voipi olla että kysymys on aivan tyhmä mikä johtunee kellonajasta.
$sql = mysql_query("SELECT kohteet.id,kohteet.nimi, DATE_FORMAT(kohteet.viimpvm, '%d.%m.%Y') FROM kohteet, tarjotut WHERE kohteet.sahko = ".$logged['yritys']." OR kohteet.lvi = ".$logged['yritys']." AND tarjotut.kohde_id = kohteet.id ORDER by kohteet.viimpvm ASC LIMIT 4");
Meneekö ihan näin helpolla, eli haetaan rivit joita ei ole merkitty tauluun?
<?php $sql = mysql_query(" SELECT kohteet.id,kohteet.nimi, DATE_FORMAT(kohteet.viimpvm, '%d.%m.%Y') FROM kohteet, tarjotut WHERE kohteet.sahko = ".$logged['yritys']." OR kohteet.lvi = ".$logged['yritys']." AND tarjotut.kohde_id <> kohteet.id LIMIT 4 "); ?>
(Mod. palautti viestin, keskustelu käy sekavaksi muuten.)
Kokeilin itse samanlaista mutta ongelma on se että se tulostaa jostain syystä kaiken kahteen tai kolmeen kertaan vaikka nuo oikeasti ovat kannassa aivan yksittäin.
EDIT: Jaahas? Varmasti tässä oli jotain mihin vastata. Kai mulla on vaan sitten liian paha darra.
Joo minäkin olin vastaavinani tuohon, mutta hävinnyt se on... mutta kuitenkin auttaisiko jos antaa määreeksi DISTINCT, jolloin jokainen rivi on vain kerran tuloksissa?
EDIT: ei mene noin helpolla.
Auttaahan tuo siihen että tulostaa vain kerran mutta tulostaa kaikki kohteet mitä on kohteet taulussa. Itsekkin ihmettelen kun kyllähän tuollaisen pitäisi olla täysin fysiikan lakien mukainen, enkä tajua mistä johtuu että tulostaa monin kertaisena nuo. "Oikein"päin tuo toimii kuin rasvattu salama.
En ihan ymmärrä selityksestäsi, mistä taulusta nyt haluat hakea ja mitä. Sanot, että pitäisi hakea yritykset, jotka eivät ole tarjonneet (mitä, tiettyyn kohteeseenko vai ylipäänsä?), mutta tuossa ihan selvästi haet kuitenkin kohteita.
Mutta jos nyt oletetaan, että Teuro ymmärsi oikein mutta koodasi väärin ja että päättelin Teuron yrityksen oikein, tässä voisi olla toimiva versio:
SELECT kohteet.id,kohteet.nimi, DATE_FORMAT(kohteet.viimpvm, '%d.%m.%Y') FROM kohteet LEFT JOIN tarjotut ON tarjotut.kohde_id = kohteet.id WHERE (kohteet.sahko = 123 OR kohteet.lvi = 123) AND tarjotut.kohde_id IS NULL -- eli jos LEFT JOIN ei löytänyt yhtään LIMIT 4
Huomaa muuten, että AND suoritetaan ennen ORia, joten alkuperäisessä kyselyssäsi haet kaikki sähköt riippumatta kohteen id:stä.
Kyseessä on siis vähänniinkuin alihankkijoiden keskenäinen extranet jossa kaikki voivat tilata helposti toisiltaan palveluita, ja tämä on siis ns. saapuneiden tarjousten lista, jolloin tulostetaan tarjouspyynnöt joihin ei vielä ole vastattu.
Ja tuolla Metabolixin haulla sain tosiaankin toimimaan. Kiitokset kaikille auttaneille/henkilöille jotka vaivautuivat pohtimaan :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.