Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27

Discussione: Ricerca full text

  1. #1
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494

    Ricerca full text

    Salve a tutti,
    non riesco a fare delle outer join:

    codice:
    SELECT hot.hotel_id, hot.hotel_name, hot.hotel_stars, hot.hotel_state, hot.hotel_city, hot.hotel_address, hot.hotel_zipcode, hot.longitud, hot.latitud, hot.hotel_desc, roomy, disponibles,
    IFNULL(p.promo_sconto, 0) AS sconto, IFNULL(hps.prezzo_stagione, 0) AS stagionale, hpc.prezzo_camera AS prezzo 
    FROM hotels AS hot
    
    
    LEFT JOIN promo p ON p.id_camera = cam.id_camera AND p.promo_dal >= '2015-06-25' AND p.promo_al <= '2015-06-26' AND p.numero_ospiti = '1'
    LEFT JOIN hotel_prezzo_stagione hps ON hps.id_camera = cam.id_camera AND hps.prezzo_dal >= '2015-06-25' AND hps.prezzo_al <= '2015-06-26' AND hps.numero_ospiti = '1'
    LEFT JOIN hotel_prezzo_camera hpc ON hpc.id_camera = cam.id_camera AND hpc.numero_ospiti = '1'
    
    
    LEFT JOIN (SELECT cam.hotel_id, cam.id_camera AS roomy, MAX(cam.numero_camere - IFNULL(bca.cantidad,0)) AS disponibles FROM camere AS cam            
    LEFT JOIN (SELECT room_type_id, MAX(total_room + blocked_inventory) AS cantidad FROM booking_check_avilability WHERE check_in_date >= '2015-06-25' AND check_out_date <= '2015-06-26' GROUP BY room_type_id) AS bca ON cam.id_camera = bca.room_type_id WHERE cam.numero_ospiti >= '1' GROUP BY cam.hotel_id HAVING disponibles >= '1' ) AS rom ON hot.hotel_id = rom.hotel_id 
    
    
    WHERE hot.hotel_city = 'Adrano' AND disponibles >= '1'
    L'errore è che non riconosce la colonna cam.id_camera.

    Ho provato anche con RIGHT JOIN ma niente.

  2. #2
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    che c'entra full text?

  3. #3
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Scusa il titolo è sbagliato. Comunque mi da errore.

  4. #4
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Precisamente l'errore è:

    #1054 - Unknown column 'cam.id_camera' in 'on clause'

  5. #5
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Sintetizzando tutto:

    codice:
    SELECT hot.*, sconto FROM hotels AS hot
    
    
    LEFT JOIN (SELECT cam.hotel_id, cam.id_camera AS roomy, IFNULL(p.promo_sconto, 0) AS sconto FROM camere AS cam 
               
    LEFT JOIN (SELECT promo_id, promo_sconto FROM promo WHERE promo_dal >= '2015-06-25' AND promo_al <= '2015-06-26' AND numero_ospiti = '1') AS p ON p.id_camera = cam.id_camera) AS rom ON hot.hotel_id = rom.hotel_id
    
    
    WHERE hot.hotel_city = 'Adrano' AND disponibles >= '1'
    mi da il seguente errore:

    #1054 - Unknown column 'p.id_camera' in 'on clause', non capisco perchè

  6. #6
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da lukezz Visualizza il messaggio
    Sintetizzando tutto:

    codice:
    SELECT hot.*, sconto FROM hotels AS hot
    
    
    LEFT JOIN (SELECT cam.hotel_id, cam.id_camera AS roomy, IFNULL(p.promo_sconto, 0) AS sconto FROM camere AS cam 
               
    LEFT JOIN (SELECT promo_id, promo_sconto FROM promo WHERE promo_dal >= '2015-06-25' AND promo_al <= '2015-06-26' AND numero_ospiti = '1') AS p ON p.id_camera = cam.id_camera) AS rom ON hot.hotel_id = rom.hotel_id
    
    
    WHERE hot.hotel_city = 'Adrano' AND disponibles >= '1'
    mi da il seguente errore:

    #1054 - Unknown column 'p.id_camera' in 'on clause', non capisco perchè
    Forse perchè non c'è nell'elenco della SELECT?
    Ma soprattutto perchè LEFT JOIN sulla select?

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Come lo scrive MySQL il campo non è nella select. Usando una select è come se tu creassi una nuova tabella e di conseguenza devi aggiungere il campo se vuoi usarlo nella clausola on.

    Di più non so cosa vuoi fare di preciso, ma quando si arriva a scrivere qualcosa di molto complicato di sicuro c'è una soluzione più semplice.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Ho risolto grazie e ho anche eliminato left join sulla select.

  9. #9
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Pensavo di aver risolto, ma nulla.

    Ho dovuto dare la join sulla select (per intuito), non sono ancora pratico con le join.

    Comunque vi faccio vedere cosa ho fatto:

    ho sei tabelle

    HOTEL
    id_hotel | hotel_name | hotel_stars
    ROOM
    id_room | id_hotel | room_name | inventory_room | max_guest
    BOOKING_CHECK_AVAILABILITY
    availability_id | check_in | check_out | id_room | total_room | blocked_inventory
    HOTEL_ROOM_PRICE
    price_id | id_room | max_guest | price_room | status
    HOTEL_SEASONAL_PRICE
    season_price_id | id_room | max_guest | season_price | price_from | price_to
    HOTEL_PROMOTION
    promotion_id | id_room | max_guest | promotion_amount | promo_from | promo_to

    da queste devo estrarre le seguenti voci:

    hotel_name, hotel_stars, availability, id_room, amount_promotion, seasonal_price and price_room.

    Questo è quello che sono riuscito a fare:

    codice:
    SELECT hot.hotel_id, hot.hotel_name, hot.hotel_stars, roomy, availability, promo, seasonal_price , price_roomy 
    FROM hotels AS hot
    
    
    LEFT JOIN (
      SELECT r.id_hotel, r.id_room AS roomy, 
             MAX(r.inventory - IFNULL(bca.cantidad,0)) AS availability,
             IFNULL(p.promotion_amount, 0) AS promo, 
             IFNULL(hsp.season_price, 0) AS seasonal_price, 
             hrp.price_room AS price_roomy 
      FROM room AS r
    
    
      LEFT JOIN (
        SELECT promotion_amount, id_room FROM hotel_promotion 
        WHERE promo_from >= '2015-06-23' AND 
              promo_to <= '2015-06-24' AND max_guest = '2'
      ) AS p ON p.id_room = r.id_room
    
    
      LEFT JOIN (
        SELECT season_price, id_camera 
        FROM hotel_seasonal_price 
        WHERE price_from >= '2015-06-23' AND 
              price_to <= '2015-06-24' AND 
              max_guest = '2'
      ) AS hsp ON hsp.id_room = r.id_room
    
    
      LEFT JOIN (
        SELECT price_room, id_camera 
        FROM hotel_room_price 
        WHERE max_guest = '2' AND status = '1'
      ) AS hrp ON hrp.id_room = cam.id_room
    
    
      LEFT JOIN (
        SELECT id_room, MAX(total_room + blocked_inventory) AS cantidad 
        FROM booking_check_avilability 
        WHERE check_in >= '2015-06-23' AND 
              check_out <= '2015-06-24' 
        GROUP BY id_room
      ) AS bca ON r.id_room = bca.id_room 
      WHERE r.max_guest >= '2' 
      GROUP BY r.id_hotel 
      HAVING availability >= '1' 
    ) AS rom ON hot.id_hotel = rom.id_hotel 
    WHERE availability >= '1'
    Di funzionare funziona però non del tutto bene. Tutto combacia, tranne availability (non prende il campo con lo stesso id degli altri)

  10. #10
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Francamente è un kran kasino e continuo a non capire da dove saltino fuori le select.
    Mi sa che stai facendo una sorta di copia-incolla di materiale lurkato a destra e sinistra, e non mi è chiaro a cosa ti serva LEFT JOIN in quanto potresti avere dati NULL

    Inizierei per tanto ad abbandonare il LEFT JOIN (se ho capito bene quello che vuoi fare), costruirei tutti i join
    (non so, li metto così)
    e poi schiafferei in fondo tutte le condizioni del mondo
    codice:
    select * from hotel,room,booking_check_availability,hotel_room_price,hotel_seasonal_price,hotel_promotion
    where 
    (hotel.idhotel=room.idroom)
    and
    (room.idroom=booking_check_availability.idroom)
    and 
    (room.id_room=hotel_room_price.id_room)
    and
    (hotel_seasonal_price.id_room=room.id_room)
    and
    (hotel.id_room=room.id_room)
    AND
    ... qui ci metti tutte le condizioni che vuoi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.