WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Mysql sök fråga (https://www.wn.se/forum/showthread.php?t=1043585)

Fia 2010-08-31 09:20

Mysql sök fråga
 
Jag försöker hämta information från 1 table basserat på sökning i 3 tabeller det går bra så långt att bara recepten med det sökord jag har angivit dyker upp och den visar också bara de recept där dela=1 men när det sen kommer till altId ignoreras det helt, den visar recepten från alla alternativ och inte bara det alternativ jag har angett. Vad gör jag för fel? och hur gör man om man har flera altId.Kan man lägga ihop resultatet från flera sökningar till en när man loppar igenom altId arrayen? Jag har gett mig in på lite överkurs här för mig men det är ju så man lär sig.

tblRecept:allmän receptinformation
tblIngrediens: InId, recId, Ingrediens
tblReceptalt: recaltId, recId, altId

SELECT DISTINCT tblRecept. *
FROM (
(
tblRecept
INNER JOIN tblReceptalt ON tblRecept.recId = tblReceptalt.recId)
INNER JOIN tblIngrediens ON tblRecept.recId = tblIngrediens.recId)
WHERE tblRecept.beskrivning LIKE '%".$sok."%'
OR tblIngrediens.ingrediens LIKE '%".$sok."%'
OR tblRecept.recnamn LIKE '%".$sok."%'
AND tblRecept.dela =1
AND tblReceptalt.altId ='".$val."'
ORDER BY tid DESC
LIMIT 0,16

Fia 2010-08-31 09:34

Japp en parantes runt OR frågorna löste problemet. Jag som har slitit en hel dag..... Du hjälpe mig Johan S

Fia 2010-08-31 10:07

Men den där när jag har fler altId? om jag kör
$dataloop = mysql_query($resultatloop);//resultatloop är frågan där uppe
och sen kör
while($row = mysql_fetch_array($dataloop)){
så går det bra men jag försökte att göra
$dataloop .= mysql_query($resultatloop);
så går det inte.
Jag försöker lägga ihop resultatet från flera frågor till en innan jag visar dem, någon som vet hur man gör det?

Johan_S 2010-08-31 10:26

Citat:

Ursprungligen postat av Fia (Inlägg 20367395)
Japp en parantes runt OR frågorna löste problemet. Jag som har slitit en hel dag..... Du hjälpe mig Johan S

Då ber jag om ursäkt att jag raderade inlägget, jag stirrade mig blind på den senare frågeställningen! Hur söker du med altId, vad är dess funktion? Kanske är det aktuellt att gruppera på denna men jag känner inte till din metodik.

Fia 2010-08-31 10:40

ett recept kan ha flera alternativ som billigt, snabbt, GI mm. jag vill att man ska kunna söka genom att ange ett sökord och välja inom vilka alternativ man vill söka inom. alltså vet man inte innan hur många alternativ som kommer att sökas igenom. alternativen kommer som en array när formen är skickad och jag loppar igenom den arrayen och kör en sql fråga för varje loop.
while (list ($key,$val) = @each ($alternativ)) {
Men som det är nu får jag ju bara ut resultatet från sista frågan efter som frågan skrivs över för varje loop. Jag skulle vilja lägga ihop resultaten från alla frågorna till en innan jag då loopar ut dem på sidan. Kanske jag tänker helt fel från början och borde gör på ett helt annat sätt men det var bara hur min tankebana fick ihop det.

Fia 2010-08-31 10:51

Jag tror jag har kommit på det om jag bygger sql frågan i loopen i stället, ska prova det nu

Fia 2010-08-31 11:55

Så här blev det

$resultatloop="SELECT DISTINCT tblRecept. *
FROM (
(
tblRecept
INNER JOIN tblReceptalt ON tblRecept.recId = tblReceptalt.recId)
INNER JOIN tblIngrediens ON tblRecept.recId = tblIngrediens.recId)
WHERE";

//****OM Aternativ är valda Loopa igenom
if(isset($alternativ)){
$checkKatId=0;
while (list ($key,$val) = @each ($alternativ)) {
//OM kategori
if($val<=10){
if ($checkKatId==0){
$resultatloop.=" (katId = '".$val."'";
$checkKatId=1;
}else{
$resultatloop.=" OR katId = '".$val."'";
}
//OM Alternativ
}
elseif($val>10){
if ($checkKatId==0){
$resultatloop.=" (tblReceptalt.altId ='".$val."'";
$checkAltId=1;
}else{
$resultatloop.=" AND tblReceptalt.altId ='".$val."'";
}//end if $checkKatId=0
}//end elseif
}//end while
$resultatloop.=") AND";
}//end Alternativ

$resultatloop.="
(
tblRecept.beskrivning LIKE '%".$sok."%'
OR tblRecept.recnamn LIKE '%".$sok."%'
OR tblIngrediens.ingrediens LIKE '%".$sok."%'
)
AND tblRecept.dela =1
ORDER BY tid DESC
LIMIT ".$start.",".$limit."";

//print $resultatloop;

$dataloop = mysql_query($resultatloop);


Alla tider är GMT +2. Klockan är nu 17:57.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson