Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kysely lausekkeen kääntö toisinpäin

laurii [25.02.2011 08:39:03]

#

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");

Teuro [25.02.2011 09:23:16]

#

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.)

laurii [25.02.2011 09:32:14]

#

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.

Teuro [25.02.2011 10:08:44]

#

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.

laurii [25.02.2011 10:18:19]

#

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.

Metabolix [25.02.2011 12:00:40]

#

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

laurii [25.02.2011 12:23:35]

#

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 :)

Vastaus

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

Tietoa sivustosta